For 循环与列表理解有何不同?
How is a For-Loop different from a List Comprehension?
我确实尝试过在线理解和寻找答案,但我找不到 清晰 和 简单 的解释循环不同于列表理解。这是一个例子,我认为 return 同样的事情,但事实并非如此。
给定一组数字,return每个元素的倒数。每正变负,负变正。
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]
我很感激任何解释,我仍然对何时使用其中一个或另一个感到困惑。
谢谢!
你的两个函数做的不是同一件事。在第一个示例中,您在遍历循环之前 return,因此只有一个项目被 returned。第二个示例 return 是完整的新列表。
你需要做更多像这样的事情:
a_list = [1, 2, -3, 4, 5]
def invert_one(a_list):
invert_list = []
for x in a_list:
invert_list.append(-x)
return invert_list
def invert_two(a_list):
return [-x for x in a_list]
print(invert_one(a_list))
[-1, -2, 3, -4, -5]
print(invert_two(a_list))
[-1, -2, 3, -4, -5]
1/ for循环是一种通用的循环方法,你可以在循环内做任何事情,它可以包含很多行代码。
结石,
印刷,
调用其他函数...
2/ 一个列表理解的目标是生成一个列表对象,
它通常是单行的,用来使书写和阅读变得美观和简短
3/ 在你的例子中,你并没有真正循环,因为你的 return 第一个迭代值:-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)
好处:这里的列表推导写起来更短,因为这个列表是 easy/short 到 write.So 这两种方法在这里都有效,但是把它写成列表推导更 pythonic 并且很好什么时候可以做到。
我确实尝试过在线理解和寻找答案,但我找不到 清晰 和 简单 的解释循环不同于列表理解。这是一个例子,我认为 return 同样的事情,但事实并非如此。
给定一组数字,return每个元素的倒数。每正变负,负变正。
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]
我很感激任何解释,我仍然对何时使用其中一个或另一个感到困惑。 谢谢!
你的两个函数做的不是同一件事。在第一个示例中,您在遍历循环之前 return,因此只有一个项目被 returned。第二个示例 return 是完整的新列表。
你需要做更多像这样的事情:
a_list = [1, 2, -3, 4, 5]
def invert_one(a_list):
invert_list = []
for x in a_list:
invert_list.append(-x)
return invert_list
def invert_two(a_list):
return [-x for x in a_list]
print(invert_one(a_list))
[-1, -2, 3, -4, -5]
print(invert_two(a_list))
[-1, -2, 3, -4, -5]
1/ for循环是一种通用的循环方法,你可以在循环内做任何事情,它可以包含很多行代码。 结石, 印刷, 调用其他函数...
2/ 一个列表理解的目标是生成一个列表对象, 它通常是单行的,用来使书写和阅读变得美观和简短
3/ 在你的例子中,你并没有真正循环,因为你的 return 第一个迭代值:-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)
好处:这里的列表推导写起来更短,因为这个列表是 easy/short 到 write.So 这两种方法在这里都有效,但是把它写成列表推导更 pythonic 并且很好什么时候可以做到。