假设:
L = [(0,'a'), (1,'b'), (2,'c')]
如何将每个0
的索引tuple
作为假装结果:
[0, 1, 2]
为此,我使用了python list comprehension
并解决了问题:
[num[0] for num in L]
尽管如此,它必须是一种pythonic方式来像 L[:1]
那样切片,但当然这种sl d不行。
有更好的解决方案吗?
答案 0 :(得分:7)
您可以使用*
解压缩zip()
。
>>> l = [(0,'a'), (1,'b'), (2,'c')]
>>> for item in zip(*l)[0]:
... print item,
...
0 1 2
对于Python 3,zip()
不会自动生成list
,因此您必须将zip
对象发送到list()
或使用next(iter())
或者其他东西:
>>> l = [(0,'a'), (1,'b'), (2,'c')]
>>> print(*next(iter(zip(*l))))
0 1 2
但是你的已经很好了。
答案 1 :(得分:3)
你的解决方案对我来说似乎是最蟒蛇的;你也可以做
tuples = [(0,'a'), (1,'b'), (2,'c')]
print zip(*tuples)[0]
...但对我来说太“聪明”了,列表理解版本更加清晰。
答案 2 :(得分:1)
您可以将其转换为numpy数组。
import numpy as np
L = [(0,'a'), (1,'b'), (2,'c')]
a = np.array(L)
a[:,0]
答案 3 :(得分:0)
>>> list = [(0,'a'), (1,'b'), (2,'c')]
>>> l = []
>>> for t in list:
l.append(t[0])
答案 4 :(得分:0)
map
怎么样?
map(lambda (number, letter): number, L)
在python 2中对其进行切片
map(lambda (number, letter): number, L)[x:y]
在python 3中,您必须先将其转换为列表:
list(map(lambda (number, letter): number, L))[x:y]