如何在Python中使用list comprehension从一个元素中获取多个元素?

时间:2014-10-26 09:17:32

标签: python list list-comprehension

我的头衔可能不太清楚,我道歉,这不容易解释。但是一个例子将更容易理解。

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], []),但它的可读性较差。

2 个答案:

答案 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))

得到相同的结果。