3 回答
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。
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并取值就可以快两倍。
添加回答
举报