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

Posted

技术标签:

【中文标题】如何在python中切片元组列表?【英文标题】:How to slice a list of tuples in python? 【发布时间】:2016-02-23 02:37:16 【问题描述】:

假设:

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

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

[0, 1, 2]

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

[num[0] for num in L]

不过,它必须是一种 Python 的方式来 L[:1] 一样对其进行切片,但这种切片当然不起作用。

有更好的解决方案吗?

【问题讨论】:

列表理解解决方案有什么问题? 我会说您的列表理解解决方案最好的方法。 列表理解对我来说似乎非常好。这是一个更糟糕的选择:from operator import itemgetter; map(itemgetter(0), lst). @Nhor,LC 工作,[0, 1, 2] 是它的输出 不要打电话给你的名单listlist 是类型的名称。 【参考方案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

但你的已经很好了。

【讨论】:

请注意,OP 用 2.7 标记了问题,因此他们只需要:zip(*l)[0]【参考方案2】:

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

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

【讨论】:

【参考方案3】:

您的解决方案对我来说似乎是最 Pythonic 的;你也可以这样做

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

...但对我来说这太“聪明”了,列表理解版本更清晰。

【讨论】:

命名你的变量list遮蔽内置list 但是 OP 先做到了! 疯狂编辑我不知道你在说什么,好心的先生。【参考方案4】:

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]

【讨论】:

【参考方案5】:
>>> list = [(0,'a'), (1,'b'), (2,'c')]
>>> l = []
>>> for t in list:
        l.append(t[0])

【讨论】:

以上是关于如何在python中切片元组列表?的主要内容,如果未能解决你的问题,请参考以下文章

python列表元组

python中啥是序列,列表,元组,字符串,索引,区别是啥?

坚持不懈续集 初学者挑战学习Python编程30天

多测师拱墅校区肖sir_高级金牌讲师_python 的切片,字符,列表,元组,字典,集合

Python中的列表元组切片增删改查#count:计算某元素出现次数找位置#index#reverse()反转#sort()

python 列表,元组,字符串 切片 超出索引值不报错