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)
你的意思是这样的吗?
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)