7

beginner to python here.

I have 2 nested lists that I want to merge:

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

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

the output I am looking for is:

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

Can this be done without any external libraries? note: len(list1) = len(list2)

Rishav Sharan
  • 2,763
  • 8
  • 39
  • 55

4 Answers4

18

Use the power of the zip function and list comprehensions:

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)]
Petr Viktorin
  • 65,510
  • 9
  • 81
  • 81
4
from operator import add
list3 = map(add, list1, list2)
John La Rooy
  • 295,403
  • 53
  • 369
  • 502
  • Or, if you want to avoid the import, `map(tuple.__add__, ...)`. (+1 for not insisting on list comprehensions where `map()` is more readable.) – Sven Marnach Oct 19 '11 at 09:13
0

Easy One

list_3 = []
list_3.extend(list_1 + list_2)
Shah Vipul
  • 625
  • 7
  • 11
0

If the order within an inner list/tuple is not important, you can use the mathematical set operations.

print [tuple(set(a)|set(b)) for a,b in zip(x,y)]

The set(a)|set(b) converts the iterables a and b to sets and takes the union of the two sets. They are then converted back to tuple as desired in the output format.

As you are a beginner to python, it is strongly recommended to master list comprehensions. It is way too powerful and concise. In addition to making your code more 'pythonic', list comprehensions can act as a friendlier replacement to 'map' and 'filter' functions.

Abdul Muneer
  • 925
  • 6
  • 14