python - 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]
我很欣赏任何解释,我仍然对何时使用其中一种感到困惑。谢谢!
解决方案
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和更好。
推荐阅读
- c++ - Qt Creator 无法自动完成标准 C++
- python - 查看 Python 脚本发出的 POST 请求的标头和正文
- wordpress - 如何解决 Wordpress 中的 Elementor 插入错误?
- php - 如何使用 php 和 ajax 使用函数插入文件和其他输入类型
- django - django-filter 搜索多个字段和模型
- javascript - BootstrapVue 的组件无法在某些 .vue 文件中读取
- c# - 从接收到的字节中轮询数据时无休止的while循环
- karate - 空手道匹配每个响应断言未能识别响应中缺少的键
- javascript - Mongodb聚合以对数组中最常见的项目进行排序?
- python - 使用 Selenium 获取响应代码的最佳方法?