2017-06-17 15 views
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] 

回答

9

使用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'])] 
6

首先使用都能運行執行映射,例如

(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')]