gpt4 book ai didi

python - 如何在列表中构建压缩 for 循环

转载 作者:行者123 更新时间:2023-11-30 22:47:06 26 4
gpt4 key购买 nike

我遇到了一段非常简洁的代码,它使用 for 循环和 if 语句来查找字符串中的所有数字,并将它们添加到列表中。问题是我不明白它为什么起作用。

string = "h3110 23 cat 444.4 rabbit 11 2 dog"
alist = [int(s) for s in string.split() if s.isdigit()]
print (alist)

这会打印['23', '11', '2']

有两点我不明白:

  1. 第 2 行 int(s) 中的“s”是如何定义的,即使它是在 for 循环之前输入的?
  2. 为什么这段代码在没有 else/return/pass/etc 的情况下也能运行? if 语句的参数到位吗?

此代码基本上执行以下操作:

alist = []
for s in string.split():
if s.isdigit():
alist.append(s)
else:
pass
print (alist)

最佳答案

这不是“列表内的 for 循环”。它是 Python 中称为“列表推导式”的特殊语法。基本语法是:[<expression> for <var> in <iterable>]或带有可选条件:[<expression> for <var> in <iterable> if <condition>] 。它基本上翻译为:

new_list = []
for <var> in <iterable>:
if <condition>:
new_list.append(<expression>)

听起来您理解正确,您只是没有意识到这是特殊语法,这就是为什么它看起来像是在尝试访问尚未声明或定义的变量。如果您有兴趣,可以在这里找到有关它们如何工作的更多信息:http://treyhunner.com/2015/12/python-list-comprehensions-now-in-color/

关于python - 如何在列表中构建压缩 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40638538/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com