如何在python中切片元组列表?

时间:2015-11-20 14:48:37

标签: python list python-2.7 list-comprehension slice

假设:

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不行。

有更好的解决方案吗?

5 个答案:

答案 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]