3 回答

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超6個(gè)贊
我知道可以用FOR完成,但是我想知道是否還有其他方法
還有另一種方法。您也可以使用map和itemgetter進(jìn)行操作:
>>> from operator import itemgetter
>>> map(itemgetter(1), elements)
但是,這仍然在內(nèi)部執(zhí)行循環(huán),并且比列表理解要慢一些:
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)))
結(jié)果:
方法1:1.25699996948
方法2:1.46600008011
如果您需要遍歷列表,則可以使用a for。

TA貢獻(xiàn)1943條經(jīng)驗(yàn) 獲得超7個(gè)贊
我在尋找以最快的方式提取2元組列表的第二個(gè)元素時(shí)發(fā)現(xiàn)了這一點(diǎn)。不是我想要的,但是運(yùn)行了與第3種方法所示相同的測(cè)試,并測(cè)試了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個(gè)元組對(duì),只需將其轉(zhuǎn)換為dict并取值就可以快兩倍。
添加回答
舉報(bào)