我的标题可能不太清楚,很抱歉,这不容易解释。但是一个例子会更容易理解。

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], [])来代替,但是可读性较低。

最佳答案

如果要使用列表推导来完成此操作,则需要嵌套两个推导:

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


请注意,尽管一旦开始嵌套理解或在其中包含条件,它们很快就会变得不可读,并且在达到这一点之前,您应该切换到嵌套的循环:记住列表理解只是嵌套循环的简写,它不会实际上不会带来任何性能上的好处。

用“ 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))


对于相同的结果。

关于python - 如何使用Python中的列表理解功能从一个元素中获取多个元素?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26571491/

10-14 04:20