我的头衔可能不太清楚,我道歉,这不容易解释。但是一个例子将更容易理解。
a = [1, 4, 7, 10]
b = [x-1, x, x+1 for x in a]
>> expected result: [0,1,2,3,4,5,6,7,8,9,10,11]
当然,它会引发错误。
是否可以使用列表理解来获得此结果?
我知道我可以使用b = sum([[x-1, x, x+1] for x in a], [])
,但它的可读性较差。
答案 0 :(得分:2)
您可以使用两个for
循环来实现:
b = [x+i for x in a for i in (-1,0,1)]
现在b
包含:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
答案 1 :(得分:1)
如果你想用列表理解来做这件事,你需要嵌套两个理解:
>>> b = [ value for x in a for value in (x-1, x, x+1) ]
>>> b
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
小心但是,一旦你开始嵌套理解或包含条件,它们就会很快变得不可读,在你到达那一点之前你应该切换到嵌套for循环:记住列表理解只是嵌套循环的简写,它实际上并没有带来任何性能上的好处。
在'longhand'中编写列表解析看起来像这样:
b = []
for x in a:
for value in (x-1, x, x+1):
b.append(value)
但事实上你最好只使用:
b = []
for x in a:
b.extend((x-1, x, x+1))
得到相同的结果。