3
我有串的名單看起來就像是:怎麼做中間過程列表理解
['1 2 3 4 5', '1 2 3 4 5',...]
而且我想例如,僅每根弦的第三和第五元素:
[(3,5), (3,5),...]
我該怎麼做這樣的事情:
[(ans[2],ans[4]); ans.split() for ans in answers]
?
我有串的名單看起來就像是:怎麼做中間過程列表理解
['1 2 3 4 5', '1 2 3 4 5',...]
而且我想例如,僅每根弦的第三和第五元素:
[(3,5), (3,5),...]
我該怎麼做這樣的事情:
[(ans[2],ans[4]); ans.split() for ans in answers]
?
使用operator.itemgetter
從不同指數獲得多個項目:
from operator import itemgetter
lst = ['1 2 3 4 5', '1 2 3 4 5']
f = itemgetter(2, 4) # get third and fifth items
r = [f(x.split()) for x in lst]
print(r)
# [('3', '5'), ('3', '5')]
很酷的事情是,它也可以用切片對象:
f = itemgetter(2, 4, slice(3, 0, -1))
r = [f(x.split()) for x in lst]
print(r)
# [('3', '5', ['4', '3', '2']), ('3', '5', ['4', '3', '2'])]
您首先使用都能運行執行映射,例如:
(ans.split() for ans in answers)
然後你遍歷發生器,和過程中間結果進一步,如:
[(imm[2],imm[4]) for imm in (ans.split() for ans in answers)]
生成:
>>> [(imm[2],imm[4]) for imm in (ans.split() for ans in answers)]
[('3', '5'), ('3', '5')]