从元组python 3列表中只获取整数
Posted
技术标签:
【中文标题】从元组python 3列表中只获取整数【英文标题】:getting only integers from a list of tuples python 3 【发布时间】:2016-08-01 09:16:50 【问题描述】:我有一个这样的元组列表:
[(a,3), (b, 4), (c, 5), (d, 1), (e,2)]
我想从中提取一个这样的列表:
[3, 4, 5, 1, 2]
我该怎么做呢?我一直不知道该怎么做。
在这种情况下,可读性次于速度,因为这段代码将隐藏在一个注释相对较好的函数中。
【问题讨论】:
[i[-1] for i in lst]
您需要加载整个列表还是也有内存限制?
如果您决定使用哪个答案,请接受并投票。请勿编辑您的问题以添加此信息。
@LutzHorn 然后他需要支持我的评论:-)
@AvinashRaj 抱歉 :) 是否愿意将其添加为答案?
【参考方案1】:
如果目标是效率,让我们看看不同的方法:
from timeit import timeit
from operator import itemgetter
T = [('a',3), ('b', 4), ('c', 5), ('d', 1), ('e',2)]
def one():
[v for _, v in T]
def two():
[v[-1] for v in T]
def three():
list(map(itemgetter(1), T))
def four():
list(map(lambda x:x[1], T))
def five():
list(zip(*T))[1]
for func in (one, two, three, four, five):
print(func.__name__ + ':', timeit(func))
结果:
one: 0.8771702060003008
two: 1.0403959849991224
three: 1.5230304799997612
four: 1.9551190909996876
five: 1.3489514130005773
所以,第一个似乎更有效。
请注意,使用 tuple 代替 list 会改变排名,但速度较慢for one
and two
:
one: 1.620873247000418 # slower
two: 1.7368736420003188 # slower
three: 1.4523903099998279
four: 1.9480371049994574
five: 1.2643559589996585
【讨论】:
【参考方案2】:获胜的发电机:
from operator import itemgetter
l = [(a,3), (b, 4), (c, 5), (d, 1), (e,2)]
r = map(itemgetter(1), l)
【讨论】:
【参考方案3】:tuples = [(a,3), (b, 4), (c, 5), (d, 1), (e,2)]
如果每次都排在第二位:
numbers = [item[1] for item in tuples]
elif 数是整数:
numbers = [value for item in tuples for value in item if isinstance(value, int)]
Elif 数字是类似于 '3' 的字符串:
numbers = [value for item in tuples for value in item if isinstance(value, str) and value.isdigit()]
【讨论】:
【参考方案4】:这是使用zip
的另一种方法:
>>> l = [('a',3), ('b', 4), ('c', 5), ('d', 1), ('e',2)]
>>> list(zip(*l))[1]
(3, 4, 5, 1, 2)
如果你真的需要 list 而不是 tuple:
>>> list(list(zip(*l))[1])
[3, 4, 5, 1, 2]
【讨论】:
【参考方案5】:你可以这样做:
>>> map(lambda x:x[1], lst)
[3, 4, 5, 1, 2]
在 python 3 中,执行:
>>> list(map(lambda x:x[1], lst))
【讨论】:
以上是关于从元组python 3列表中只获取整数的主要内容,如果未能解决你的问题,请参考以下文章