我遇到了一个非常精简的代码块,它使用for-loop和if语句来查找字符串中的所有数字,并将它们添加到列表中。问题是我不明白它为什么会起作用。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
<tr>
<td colspan="" width="6%">
<center>
<input type="checkbox" name="check_yes[]" value="yes">
</center>
</td>
<td colspan="" width="6%">
<center>
<input type="checkbox" name="check_no[]" value="no">
</center>
</td>
</tr>
</table>
这会打印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']
答案 0 :(得分:3)
这不是列表中的&#34; for循环。&#34;它在Python中的特殊语法称为&#34;列表理解。&#34;基本语法为:[<expression> for <var> in <iterable> if <condition>]
或带有可选条件:new_list = []
for <var> in <iterable>:
if <condition>:
new_list.append(<expression>)
。它基本上转化为:
imshow
听起来你理解它是正确的,你只是没有意识到这是特殊的语法,这就是为什么看起来它试图访问尚未声明或定义的变量。如果您有兴趣,可以在此处找到有关其工作方式的更多信息:http://treyhunner.com/2015/12/python-list-comprehensions-now-in-color/
答案 1 :(得分:0)
除了s
被转换为整数(它应该是alist.append(int(s))
)之外,单行完成了您在下面所写的内容。
单线如何工作?它创建了一个新列表,其中包含现有列表的所有元素(在您的情况下,现有列表为string.split()
),if
之后的条件为真 - 该元素确实是一个数字。