Python: объединить вложенные списки

новичок в python здесь.

У меня есть 2 вложенных списка, которые я хочу объединить:

list1 = ['a',
         (b, c),
         (d, e),
         (f, g, h) ]

list2 = [(p,q),
         (r, s),
         (t),
         (u, v, w) ]

результат, который я ищу:

list3 = [(a, p, q),
         (b, c, r, s),
         (d, e, t),
         (f, g, h, u, v, w) ]

Можно ли это сделать без каких-либо внешних библиотек? примечание: длина (список1) = длина (список2)


person Rishav Sharan    schedule 18.10.2011    source источник
comment
новичок в Python здесь. – это означает, что вам следует прочитать руководство.   -  person Björn Pollex    schedule 18.10.2011
comment
Привет. Я читал туториалы. Я знаю, как объединять простые списки. Но не знаю, как работать с вложенными списками.   -  person Rishav Sharan    schedule 18.10.2011
comment
Кроме того, первый элемент list1 в вашем примере является строкой, но после слияния он кажется объектом.   -  person Björn Pollex    schedule 18.10.2011
comment
... что действительно, если a == 'a', но тогда остальное не имеет никакого смысла. (t) не является кортежем, кстати. -1.   -  person Fred Foo    schedule 18.10.2011


Ответы (4)


Используйте возможности функции zip и списковые включения:

list1 = [('a', ),
        ('b', 'c'),
        ('d', 'e'),
        ('f', 'g', 'h') ]

list2 = [('p', 'q'),
        ('r', 's'),
        ('t', ),
        ('u', 'v', 'w') ]

print [a + b for a, b in zip(list1, list2)]
person Petr Viktorin    schedule 18.10.2011

Если порядок во внутреннем списке/кортеже не важен, вы можете использовать математические операции над множествами.

напечатайте [кортеж (набор (a) | набор (b)) для a, b в zip (x, y)]

set(a)|set(b) преобразует итерации a и b в наборы и выполняет объединение двух наборов. Затем они преобразуются обратно в кортеж по желанию в выходном формате.

Поскольку вы новичок в python, настоятельно рекомендуется освоить понимание списков. Это слишком мощно и лаконично. В дополнение к тому, что ваш код становится более «питоновским», понимание списков может действовать как более удобная замена функциям «карты» и «фильтра».

person Abdul Muneer    schedule 18.10.2011

Легкий

list_3 = []
list_3.extend(list_1 + list_2)
person Shah Vipul    schedule 22.02.2021

person    schedule
comment
Или, если вы хотите избежать импорта, map(tuple.__add__, ...). (+1 за то, что не настаиваете на понимании списка, где map() более читабелен.) - person Sven Marnach; 19.10.2011