如何在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]
是它的输出
不要打电话给你的名单list
。 list
是类型的名称。
【参考方案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中啥是序列,列表,元组,字符串,索引,区别是啥?
多测师拱墅校区肖sir_高级金牌讲师_python 的切片,字符,列表,元组,字典,集合
Python中的列表元组切片增删改查#count:计算某元素出现次数找位置#index#reverse()反转#sort()