Frage

Assume I have a list of two-element tuples and a list of (not tuple) literals e.g. integer:

a = [('x', 'a'), ('y', 'b'), ('z', 'c')]
b = [1, 2 ,3]

And I want to make a list of three-element tuples so I coded like below:

zipped = zip((t[0] for t in a), (t[1] for t in a), b)
assert zipped == [('x', 'a', 1), ('y', 'b', 2), ('z', 'c', 3)]

My current code works pretty well but I want to know that is there any more efficient and elegant recipe however my code have to iterate and unpack every tuples twice. Can anyone please advise?

War es hilfreich?

Lösung

Using list comprehension, tuple unpacking:

>>> a = [('x', 'a'), ('y', 'b'), ('z', 'c')]
>>> b = [1, 2 ,3]
>>> [(x,y,z) for (x,y), z in zip(a, b)]
[('x', 'a', 1), ('y', 'b', 2), ('z', 'c', 3)]

>>> a = [('x', 'a'), ('y', 'b'), ('z', 'c')]
>>> b = [1, 2 ,3]
>>> [x + (y,) for x, y in zip(a, b)]
[('x', 'a', 1), ('y', 'b', 2), ('z', 'c', 3)]

Andere Tipps

one without using for loop,

zip(*(zip(*a)+ [b]))
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top