Reputation: 13
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
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
Reputation: 17156
Use:
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
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