Python: объединить вложенные списки - PullRequest
4 голосов
/ 18 октября 2011

новичок на питоне здесь.

У меня есть 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) ]

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

Ответы [ 3 ]

12 голосов
/ 18 октября 2011

Используйте возможности функции 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)]
3 голосов
/ 18 октября 2011
from operator import add
list3 = map(add, list1, list2)
0 голосов
/ 18 октября 2011

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

print [tuple (set (a) | set (b)) для a, b в zip (x, y)]

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...