Home > other >  Create list of strings from nested list of indices and nested list of strings
Create list of strings from nested list of indices and nested list of strings

Time:02-05

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?

CodePudding user response:

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']]

CodePudding user response:

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']]

CodePudding user response:

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)
  •  Tags:  
  • Related