Tiffany
Tiffany

Reputation: 13

Create list of strings from nested list of indices and nested list of strings

I have two nested lists: one that holds lists of indices, and the other with lists of strings. The 0th indices sublist corresponds to the 0th strings sublist. Inside of each indices sublist are the indices of the strings of the corresponding strings sublist that I want to pull into a new nested list.

nested_indices = [[3,4,5],[0,1,2],[6,7,8]]
strings_list = [['0a','0b','0c','0d','0e','0f','0g','0g','0h', '0i'],
           ['1a','1b','1c','1d','1e','1f','1g','1g','1h', '1i'],
           ['2a','2b','2c','2d','2e','2f','2g','2g','2h', '2i'],
           ['3a','3b','3c','3d','3e','3f','3g','3g','3h', '3i'],
           ['4a','4b','4c','4d','4e','4f','4g','4g','4h', '4i'],
           ['5a','5b','5c','5d','5e','5f','5g','5g','5h', '5i'],
           ['6a','6b','6c','6d','6e','6f','6g','6g','6h', '6i'],
           ['7a','7b','7c','7d','7e','7f','7g','7g','7h', '7i'],
           ['8a','8b','8c','8d','8e','8f','8g','8g','8h', '8i'],
           ['9a','9b','9c','9d','9e','9f','9g','9g','9h', '9i']]

The lists inside nested_indices will be variable length in use. But for this example, this is what I'm hoping to get:

expected=[['0d','0e','0f'],['1a','1b','1c'],['2g','2g','2h']]

This is my code so far, which is not only not giving me the correct values, but is also losing the nested list structure.

new_list = []

for sublist in nested_indices:
    for (item, index) in enumerate(sublist):
        new_list.append(strings_list[item][index])
        
print(new_list)

Which results in: ['0d', '1e', '2f', '0a', '1b', '2c', '0g', '1g', '2h']

Where am I going wrong?

Upvotes: 1

Views: 411

Answers (3)

MuzamalRana
MuzamalRana

Reputation: 1

There you go

for i,idx in enumerate(nested_indices):
    print(i)
    nested_list=[]
    for j in idx:
        print(j)
        nested_list.append(strings_list[i][j])
    output_f.append(nested_list)

Upvotes: 0

DarrylG
DarrylG

Reputation: 17156

Use:

  • zip to pair corresponding sublists in both nested lists
  • list comprehension to get the corresponding values from paired sublists

Code

new_list = [[vals[i] for i in idxs] for idxs, vals in zip(nested_indices, strings_list)]

Result

[['0d', '0e', '0f'], ['1a', '1b', '1c'], ['2g', '2g', '2h']]

Upvotes: 1

Abolfazl Ghaemi
Abolfazl Ghaemi

Reputation: 454

The problem in your code is that you didn't get the sublist index. you should enumerate twice.

new_list = []

for sublistKey,sublistValue in enumerate(nested_indices):
    x = []
    for (item, index) in enumerate(sublistValue):
        x.append(strings_list[sublistKey][index])
    new_list.append(x)      

print(new_list) # expected result = [['0d', '0e', '0f'], ['1a', '1b', '1c'], ['2g', '2g', '2h']]

Upvotes: 0

Related Questions