How to merge list of strings into list of lists?
Question:
I have a list like this :
list_1 = ['2a', '3b', '2c', '2d', ... ]
and an another list like this :
list_2 = [[], [], [], ['3a'], ['3b']... ]
These two lists have the same size. I want to merge them to obtain a third one:
list_3 = [['2a'], ['3b'], ['2c','3a'], ['2d','3b']...]
I tried to use dataFrames to merge, I tried some differents loops but all I got is wrong. I tried some answers of similars questions but nothing I got with them is what I expect.
This is some examples I tried :
list_3 = list(product(list_1, list_2))
for i in list_2:
for j in list_2:
list_3 = list.append(str(i) + str(j))
list_3 = [[str(list_1[x]) + str(x)] for x in list1,list_2]
The issues I get are :
list_3 = [['2a', '3b', '2c', '2d'...], [],[]....]
list_3 = [('2a', []), ('3b',[]), ('2c',['3a']), ...]
Have you any solutions ? If the answer already exists please link it.
Answers:
Just zip
the lists and merge each tuple(str, list)
using +
after changing the string to a list
list_3 = [[x] + z for x, z in zip(list_1, list_2)]
An alternative to zip
is to iterate over the lists using enumerate
list_3 = [[x] + list_2[i] for i, x in enumerate(list_1)]
Output
print(list_3) # [['2a'], ['3b'], ['2c', '3a'], ['2d', '3b']]
You want to pair stuff, don’t double-loop or product anything
Use zip
to iterate on both then build the merge
list_1 = ['2a', '3b', '2c', '2d']
list_2 = [[], [], ['3a'], ['3b']]
result = []
for value1, sublist2 in zip(list_1, list_2):
result.append([value1] + sublist2)
print(result)
# [['2a'], ['3b'], ['2c', '3a'], ['2d', '3b']]
I would ensure that both lists have the same length, then use their index to append to the new list. Simple solution using only list[index]
and list comprehension:
list_1 = ['2a', '3b', '2c', '2d']
list_2 = [ [], [], ['3a'], ['3b'] ]
if len(list_1) == len(list_2):
new_list = [[list_1[i]] + list_2[i] for i in range(len(list_1))]
print(new_list)
Output
[['2a'], ['3b'], ['2c', '3a'], ['2d', '3b']]
I have a list like this :
list_1 = ['2a', '3b', '2c', '2d', ... ]
and an another list like this :
list_2 = [[], [], [], ['3a'], ['3b']... ]
These two lists have the same size. I want to merge them to obtain a third one:
list_3 = [['2a'], ['3b'], ['2c','3a'], ['2d','3b']...]
I tried to use dataFrames to merge, I tried some differents loops but all I got is wrong. I tried some answers of similars questions but nothing I got with them is what I expect.
This is some examples I tried :
list_3 = list(product(list_1, list_2))
for i in list_2:
for j in list_2:
list_3 = list.append(str(i) + str(j))
list_3 = [[str(list_1[x]) + str(x)] for x in list1,list_2]
The issues I get are :
list_3 = [['2a', '3b', '2c', '2d'...], [],[]....]
list_3 = [('2a', []), ('3b',[]), ('2c',['3a']), ...]
Have you any solutions ? If the answer already exists please link it.
Just zip
the lists and merge each tuple(str, list)
using +
after changing the string to a list
list_3 = [[x] + z for x, z in zip(list_1, list_2)]
An alternative to zip
is to iterate over the lists using enumerate
list_3 = [[x] + list_2[i] for i, x in enumerate(list_1)]
Output
print(list_3) # [['2a'], ['3b'], ['2c', '3a'], ['2d', '3b']]
You want to pair stuff, don’t double-loop or product anything
Use zip
to iterate on both then build the merge
list_1 = ['2a', '3b', '2c', '2d']
list_2 = [[], [], ['3a'], ['3b']]
result = []
for value1, sublist2 in zip(list_1, list_2):
result.append([value1] + sublist2)
print(result)
# [['2a'], ['3b'], ['2c', '3a'], ['2d', '3b']]
I would ensure that both lists have the same length, then use their index to append to the new list. Simple solution using only list[index]
and list comprehension:
list_1 = ['2a', '3b', '2c', '2d']
list_2 = [ [], [], ['3a'], ['3b'] ]
if len(list_1) == len(list_2):
new_list = [[list_1[i]] + list_2[i] for i in range(len(list_1))]
print(new_list)
Output
[['2a'], ['3b'], ['2c', '3a'], ['2d', '3b']]