假设:
L = [(0,'a'), (1,'b'), (2,'c')]
如何将每个元组的索引0
作为预期结果获取:
[0, 1, 2]
为了达到这个目的,我使用了 Python 列表推导式
并解决了这个问题:[num[0] for num in L]
尽管如此,一定有一种Pythonic的方法可以像 L[:1] 这样对其进行切片,但是当然这种切片不起作用。
是否有更好的解决方案?
假设:
L = [(0,'a'), (1,'b'), (2,'c')]
如何将每个元组的索引0
作为预期结果获取:
[0, 1, 2]
为了达到这个目的,我使用了 Python 列表推导式
并解决了这个问题:[num[0] for num in L]
尽管如此,一定有一种Pythonic的方法可以像 L[:1] 这样对其进行切片,但是当然这种切片不起作用。
是否有更好的解决方案?
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
zip(*l)[0]
。 - Ashwini Chaudharytuples = [(0,'a'), (1,'b'), (2,'c')]
print zip(*tuples)[0]
...但对我而言,那太“聪明”了,列表推导式版本更清晰易懂。
import numpy as np
L = [(0,'a'), (1,'b'), (2,'c')]
a = np.array(L)
a[:,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]
>>> list = [(0,'a'), (1,'b'), (2,'c')]
>>> l = []
>>> for t in list:
l.append(t[0])
[num[:1] for num in L]
或2)zip(*list)[:1]
。 - Nhor