如何使用列表推导来扩展python中的列表?

Eri*_*son 15 python for-loop nested list-comprehension list

我没有Python经验,我经常编写(简化)代码如下:

accumulationList = []
for x in originalList:
    y = doSomething(x)
    accumulationList.append(y)
return accumulationList
Run Code Online (Sandbox Code Playgroud)

然后在我的测试通过后,我重构了

return [doSomething(x) for x in originalList]
Run Code Online (Sandbox Code Playgroud)

但是假设结果有点不同,我的循环看起来像这样:

accumulationList = []
for x in originalList:
    y = doSomething(x)
    accumulationList.extend(y)
return accumulationList
Run Code Online (Sandbox Code Playgroud)

doSomething列表返回一个列表.什么是最恐怖的方式来实现这一目标?显然,之前的列表理解会给出一个列表列表.

Shu*_*ary 12

列表理解更简单,更清晰:

[y for x in originalList for y in doSomething(x)]
Run Code Online (Sandbox Code Playgroud)


eum*_*iro 5

你的意思是这样的吗?

accumulationList = []
for x in originalList:
    accumulationList.extend(doSomething(x))
return accumulationList
Run Code Online (Sandbox Code Playgroud)

或更短的代码(但不是最佳的):

return sum((doSomething(x) for x in originalList), [])
Run Code Online (Sandbox Code Playgroud)

或相同:

return sum(map(doSomething, originalList), [])
Run Code Online (Sandbox Code Playgroud)

感谢 @eyquem 的提示(如果使用 Python 2.x):

import itertools as it

return sum(it.imap(doSomething, originalList), [])
Run Code Online (Sandbox Code Playgroud)