将Python列表转换为元组列表

5

我想要实现的目标:

[a, b, c, d] -> [ (a, x), (b, x), (c, x), (d, x) ]

我的初步想法:

done = []

for i in [a, b, c, d]:
   done.append((i, x))

有没有更符合Python风格的方法来完成这个任务?
3个回答

13
done = [(el, x) for el in [a, b, c, d]]

8
使用 itertools.repeat
>>> x = 'apple'
>>> a,b,c,d = 'a','b','c','d'
>>> from itertools import repeat    
>>> zip([a,b,c,d],repeat(x))
[('a', 'apple'), ('b', 'apple'), ('c', 'apple'), ('d', 'apple')]

使用 itertools.product

>>> from itertools import product
>>> list(product([a,b,c,d],[x]))
[('a', 'apple'), ('b', 'apple'), ('c', 'apple'), ('d', 'apple')]

1
有趣的方法。我曾考虑过使用zip()和[x]*len([a, b, c, d]),但我不知道itertools。 - user880248
x = 'apple' y = [a,b,c,d] zip(y,[x]*len(y))
这也可以,我在考虑直接使用数组而不保存到变量的快速方法。
- jamylak
1
我刚刚读了这篇关于repeat的博客文章,它非常快速。我猜其中一种或者两种方法比其他方法更快。第二种方法非常巧妙。 - agf
也许在其他情况下它们更快,但我认为在这种情况下它们并没有更快。由于这个过程非常简单,列表推导式已经做到了最少,所以不太可能加速这个过程。 - jamylak
这个技巧与直接保存值不同,而是保存一个生成器有关。 - user880248

6
另一种实现相同结果的方法:列表推导式。
done = [(i,x) for i in [a,b,c,d]]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接