为了账号安全,请及时绑定邮箱和手机立即绑定

如何从元组列表中提取第n个元素?

如何从元组列表中提取第n个元素?

杨魅力 2019-12-15 13:08:36
我正在尝试从元组列表中获取第n个元素。我有类似的东西:elements = [(1,1,1),(2,3,7),(3,5,10)]我希望仅将每个元组的第二个元素提取到一个列表中:seconds = [1, 3, 5]我知道可以通过for循环来完成,但是我想知道是否还有另一种方法,因为我有成千上万的元组。
查看完整描述

3 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

我知道可以用FOR完成,但是我想知道是否还有其他方法


还有另一种方法。您也可以使用map和itemgetter进行操作:


>>> from operator import itemgetter

>>> map(itemgetter(1), elements)

但是,这仍然在内部执行循环,并且比列表理解要慢一些:


setup = 'elements = [(1,1,1) for _ in range(100000)];from operator import itemgetter'

method1 = '[x[1] for x in elements]'

method2 = 'map(itemgetter(1), elements)'


import timeit

t = timeit.Timer(method1, setup)

print('Method 1: ' + str(t.timeit(100)))

t = timeit.Timer(method2, setup)

print('Method 2: ' + str(t.timeit(100)))

结果:


方法1:1.25699996948

方法2:1.46600008011

如果您需要遍历列表,则可以使用a for。



查看完整回答
反对 回复 2019-12-16
?
PIPIONE

TA贡献1829条经验 获得超9个赞

我在寻找以最快的方式提取2元组列表的第二个元素时发现了这一点。不是我想要的,但是运行了与第3种方法所示相同的测试,并测试了zip方法


setup = 'elements = [(1,1) for _ in range(100000)];from operator import itemgetter'

method1 = '[x[1] for x in elements]'

method2 = 'map(itemgetter(1), elements)'

method3 = 'dict(elements).values()'

method4 = 'zip(*elements)[1]'


import timeit

t = timeit.Timer(method1, setup)

print('Method 1: ' + str(t.timeit(100)))

t = timeit.Timer(method2, setup)

print('Method 2: ' + str(t.timeit(100)))

t = timeit.Timer(method3, setup)

print('Method 3: ' + str(t.timeit(100)))

t = timeit.Timer(method4, setup)

print('Method 4: ' + str(t.timeit(100)))


Method 1: 0.618785858154

Method 2: 0.711684942245

Method 3: 0.298138141632

Method 4: 1.32586884499

因此,如果您有2个元组对,只需将其转换为dict并取值就可以快两倍。



查看完整回答
反对 回复 2019-12-16
  • 3 回答
  • 0 关注
  • 975 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信