我怎样才能将列表压缩到已经压缩的列表中?

时间:2014-01-28 06:40:42

标签: python list itertools iterable-unpacking

假设我有一个包含两元素元组的列表和一个(不是元组)文字列表,例如整数:

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

我想制作一个三元素元组的列表,所以我编码如下:

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)]

我当前的代码工作得很好,但我想知道有更高效和优雅的配方,但是我的代码必须迭代并解压缩每个元组两次。 任何人都可以建议吗?

2 个答案:

答案 0 :(得分:7)

使用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)]

答案 1 :(得分:3)

一个没有使用for循环,

zip(*(zip(*a)+ [b]))