Given any number of zipped lists, e.g.
>>> L1 = [1,2,3]
>>> L2 = [1,2,3]
>>> zipped = zip(L1, L2)
[[(1, 1), (2, 2), (3, 3)]
how can I append another list to zipped that produces the same output as
>>> L3 = [5,5,5]
>>> zip(L1, L2, L3)
[(1, 1, 5), (2, 2, 5), (3, 3, 5)]
I was thinking in the direction of append(), but that produces the following undesired result
>>> zipped.append(L3)
[(1, 1), (2, 2), (3, 3), [5, 5, 5]]
Background: I want to create the zipped-list within a loop for any number of lists.
EDIT:
It appears to me now that I was missing one part of my problem. Here is a MWE based an Ryan's answer:
import random
N = 4
zipped2 = zip([1,2,3],[1,2,3]) # works
zipped2 = [] # does not work
for n in range(N):
Ln = random.sample(xrange(100),3)
zipped2 = [old + (new,) for old, new in zip(zipped2, Ln)]
print(zipped2)
Using this method on pre-zipped lists works perfectly. However, I would like to create the entire output inside the loop and thus would like to start with an empty list.
If you really like the word zip
, you can use it lots:
zip(*zip(*zipped), L3)
If you’re using Python 2 or are a fan of having people understand your code, a list comprehension is probably best:
[old + (new,) for old, new in zip(zipped, L3)]
Your edit seems to indicate you just want to zip some number of lists, though:
import random
N = 4
columns = []
for n in xrange(N):
Ln = random.sample(xrange(100), 3)
columns.append(Ln)
zipped2 = zip(*columns)
print(zipped2)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With