Python 如何在列表中构建压缩for循环
我遇到了一段非常精简的代码,它使用for循环和if语句查找字符串中的所有数字,并将它们添加到列表中。问题是我不明白它为什么会起作用Python 如何在列表中构建压缩for循环,python,python-3.x,syntax,Python,Python 3.x,Syntax,我遇到了一段非常精简的代码,它使用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'] 有两位我没有得到: 第2行int(s)中的“s”是如何定义的,即使它是在for循环之前输入的
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']
有两位我没有得到:
alist = []
for s in string.split():
if s.isdigit():
alist.append(s)
else:
pass
print (alist)
一行程序与您在下面写的完全相同,只是
s
被转换为整数(它应该是alist.append(int(s))
)
一行是如何工作的?它创建一个现有列表中所有元素的新列表(在您的例子中,现有列表是string.split()
),如果之后的条件为true,则该元素确实是一个数字。这不是“列表中的for循环”。这是Python中称为“列表理解”的特殊语法基本语法是:[for in]
或带有可选条件:[for in if]
。它基本上转化为:
new_list = []
for <var> in <iterable>:
if <condition>:
new_list.append(<expression>)
new_list=[]
例如:
如果:
新建_list.append()
听起来您似乎理解正确,只是不知道这是一种特殊的语法,这就是为什么它看起来像是在试图访问一个尚未声明或定义的变量。如果您感兴趣,可以在此处找到有关它们如何工作的更多信息: