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

我正在尝试从元组列表中获取第n个元素。


我有类似的东西:


elements = [(1,1,1),(2,3,7),(3,5,10)]

我希望仅将每个元组的第二个元素提取到一个列表中:


seconds = [1, 3, 5]

我知道可以通过for循环来完成,但是我想知道是否还有另一种方法,因为我有成千上万的元组。


杨魅力
浏览 986回答 3
3回答

UYOU

我知道可以用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 timeitt = 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。

PIPIONE

我在寻找以最快的方式提取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 timeitt = 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.618785858154Method 2: 0.711684942245Method 3: 0.298138141632Method 4: 1.32586884499因此,如果您有2个元组对,只需将其转换为dict并取值就可以快两倍。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python