Вложенная структура: список списков кортежей python

Я пытаюсь иметь дело с вложенной структурой, которая выглядит так:

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)

Но, похоже, это вообще не работает. Может кто-нибудь помочь мне?

Большое спасибо заранее!

ваша логика неверна... для кортежа каждый вы перебираете column_to_add. Вы хотите сопоставить каждый индекс internal_list с соответствующим индексом column_to_add. Ответ Zipa делает это с помощью enumerate, который предоставляет индекс для работы. В ответе Ракеша используется zip, который застегивает два списка, где он их распаковывает и использует. Оба используют понимание списка, которое похоже на цикл for, добавляющий элементы к исходному пустому списку.

Andrew Allen 17.05.2019 14:39

Теперь это намного понятнее, поэтому, если я правильно понял, использование zip или enumerate полностью эквивалентно. Верно?

iraciv94 17.05.2019 15:27

Они оба создают объекты итераторов (выход на лету), хотя созданные объекты немного отличаются, один (zip) представляет собой кортеж для фактических совпадающих элементов, один представляет собой кортеж (индекс, элемент), оставляя вам возможность использовать индекс однако тебе нравится. Я предпочитаю enumerate в этом случае, так как код более явный.

Andrew Allen 17.05.2019 17:04
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
4
3
223
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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')]]
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')]]

Обновление

Было бы более «безопасно» использовать длину 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')]]

Использование 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')]]

Другие вопросы по теме

Похожие вопросы

Как получить некоторые элементы из массива
Как сравнить 2 строки с одинаковыми индексами и удалить одну на основе определенного условия?
Как преобразовать файлы изображений в CSV с меткой
Как я проверяю, что значение моего одного столбца присутствует в другом столбце
Преобразование CSV в JSON. Как сохранить значения с одним и тем же индексом?
Невозможно отобразить заголовок сообщения на странице удаления комментариев
Как сбросить и сохранить аргументы функции без встраивания всего содержимого контейнера?
Правильный способ добавить значения в пустой столбец в цикле в фрейме данных, python
Команды с несколькими общими параметрами, входящими в один аргумент, с использованием специального декоратора
Как исправить «TypeError at /orders/create/аргумент типа «DeferredAttribute» не является итерируемым» при использовании платежного шлюза Django (Paytm)