Я пытаюсь разобраться с вложенной структурой, которая выглядит следующим образом:
list_of_lists= [[("aaa"),("bbb")],[("ccc"),("ddd")],[("eee"),("fff")]]
и мне нужно добавить столбец элементов, который выглядит следующим образом:
column_to_add = ["string1", "string2", "string3"]
Конечный результат должен выглядеть так:
[[("aaa", "string1"),("bbb", "string1")],[("ccc", "string2"),("ddd", "string2")],[("eee", "string3"),("fff", "string3")]]
Я пробовал что-то вроде этого:
result= []
for internal_list in list_of_lists:
for tuple in internal_list:
for z in tuple:
for new_string in column_to_add:
kk=list(tuple)
result = tuple.append(new_string)
Но это, похоже, не работает вообще. Может кто-нибудь мне помочь?
Большое спасибо заранее!
Всего 5 ответов
Если ваши данные выглядят так:
list_of_lists= [[("aaa", ),("bbb", )],[("ccc", ),("ddd", )],[("eee", ),("fff", )]]
Вы должны использовать:
[[y + (column_to_add[i], ) for y in x] for i, x in enumerate(list_of_lists)]
Это производит:
#[[('aaa', 'string1'), ('bbb', 'string1')],
# [('ccc', 'string2'), ('ddd', 'string2')],
# [('eee', 'string3'), ('fff', 'string3')]]
Использование zip
и понимания вложенного списка
Пример:
list_of_lists= [[("aaa"),("bbb")],[("ccc"),("ddd")],[("eee"),("fff")]]
column_to_add = ["string1", "string2", "string3"]
print([[(i, n) for i in m] for m,n in zip(list_of_lists, column_to_add)])
Выход:
[[('aaa', 'string1'), ('bbb', 'string1')],
[('ccc', 'string2'), ('ddd', 'string2')],
[('eee', 'string3'), ('fff', 'string3')]]
list_of_lists= [[("aaa"),("bbb")],[("ccc"),("ddd")],[("eee"),("fff")]]
column_to_add = ["string1", "string2", "string3"]
res = list(map(lambda x,y: [(i,y) for i in x], list_of_lists, column_to_add))
print(res)
выход
[
[('aaa', 'string1'), ('bbb', 'string1')],
[('ccc', 'string2'), ('ddd', 'string2')],
[('eee', 'string3'), ('fff', 'string3')]
]
Вы можете использовать список понимания.
lst = [[("aaa",), ("bbb",)], [("ccc",), ("ddd",)], [("eee",), ("fff",)]]
col = ["string1", "string2", "string3"]
result = [[(*tup, col[i]) for tup in lst[i]] for i in range(len(lst))]
Выход:
[[('aaa', 'string1'), ('bbb', 'string1')], [('ccc', 'string2'), ('ddd', 'string2')], [('eee', 'string3'), ('fff', 'string3')]]
Upd.
Было бы более «безопасно» использовать длину col
качестве ограничения диапазона.
result = [[(*tup, col[i]) for tup in lst[i]] for i in range(len(col))]
Вам понадобится что-то вроде zip()
.
Во-первых, держите (aaa, bbb)
и string1
в паре.
a = [[("aaa"),("bbb")],[("ccc"),("ddd")],[("eee"),("fff")]] b = ["string1", "string2", "string3"] zipped_data = list(zip(a, b)) # zipped_data = [(['aaa', 'bbb'], 'string1'), (['ccc', 'ddd'], 'string2'), (['eee', 'fff'], 'string3')]
Затем пусть string1
пару с каждым итератором кортежа (aaa, bbb)
.
new_list = [] for u in zipped_data: new_list.append([(u[0][0], u[1]), (u[0][1], u[1])]) print(new_list)
Выход
[[('aaa', 'string1'), ('bbb', 'string1')], [('ccc', 'string2'), ('ddd', 'string2')], [('eee', 'string3'), ('fff', 'string3')]]