首页 > 解决方案 > For-Loop 与 List Comprehension 有何不同?

问题描述

我确实尝试在网上理解和寻找答案,但我找不到一个清晰简单的解释来说明 for 循环与列表理解有何不同。这是一个我认为会返回相同内容的示例,但事实并非如此。

给定一组数字,返回每个元素的倒数。每个积极的变成消极的,消极的变成积极的。

a_list = [1, 2, -3, 4, 5]

一个for循环

def invert(a_list):
    for x in a_list:
        return -x

invert(a_list)
-1

而在列表理解中......

def invert(a_list):
    return [-x for x in a_list]

invert(a_list)
[-1, -2, 3, -4, -5]

我很欣赏任何解释,我仍然对何时使用其中一种感到困惑。谢谢!

标签: pythonfor-looplist-comprehension

解决方案


1/ for 循环是一种通用的循环方法,你可以在循环中做任何事情,它可以包含很多行代码。微积分,打印,调用其他函数......

2/ 列表理解的目标是生成一个列表对象,它通常是单行的,用来使它写和读起来又好又短

3/ 在您的示例中,您并没有真正循环,因为您返回第一个迭代值:-x 您不允许第二次迭代追加

如果您想要完全相同的行为:

a_list = [1, 2, -3, 4, 5]
inverted = [-x for x in a_list]
print(inverted)

与以下结果相同且相同:

a_list = [1, 2, -3, 4, 5]
inverted = []
for x in a_list:
    inverted.append(-x)
print(inverted)

好处:这里的列表推导式写起来更短,因为这个列表很容易/很短。所以这两种方法都在这里工作,但是当你可以做到时,把它写成列表推导式更pythonic和更好。


推荐阅读