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

How to slice a list of tuples in python?

假设:

L = [(0,'a'), (1,'b'), (2,'c')]

如何得到每个 tuple 的索引 0 作为伪装的结果:

[0, 1, 2]

为此,我使用了 python list comprehension 并解决了问题:

[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

但是你的已经很好了。

你的解决方案对我来说看起来是最pythonic的;你也可以

tuples = [(0,'a'), (1,'b'), (2,'c')]
print zip(*tuples)[0]

...但对我来说太过分了"clever",列表理解版本更清晰。

>>> list = [(0,'a'), (1,'b'), (2,'c')]
>>> l = []
>>> for t in list:
        l.append(t[0])

map呢?

map(lambda (number, letter): number, L)

将其切成 python 2

map(lambda (number, letter): number, L)[x:y]

在python3中你必须先把它转换成list:

list(map(lambda (number, letter): number, L))[x:y]

您可以将其转换为 numpy 数组。

import numpy as np
L = [(0,'a'), (1,'b'), (2,'c')]
a = np.array(L)
a[:,0]