Python 列表理解中的中间过程

Python 列表理解中的中间过程,python,list-comprehension,Python,List Comprehension,我有一个字符串列表,如下所示: ['1 2 3 4 5', '1 2 3 4 5',...] 例如,我只需要每个字符串的第三个和第五个元素: [(3,5), (3,5),...] 我怎样才能做这样的事情: [(ans[2],ans[4]); ans.split() for ans in answers] ? 您首先执行映射,例如使用生成器: (ans.split() for ans in answers) 然后在生成器上迭代,并进一步处理中间结果,如: [(imm[2],imm[4])

我有一个字符串列表,如下所示:

['1 2 3 4 5', '1 2 3 4 5',...]
例如,我只需要每个字符串的第三个和第五个元素:

[(3,5), (3,5),...]
我怎样才能做这样的事情:

[(ans[2],ans[4]); ans.split() for ans in answers]

?

首先执行映射,例如使用生成器

(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')]
用于从不同索引中获取多个项目:

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