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

时间:2016-11-16 17:29:36

标签: python python-3.x syntax

我遇到了一个非常精简的代码块,它使用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)

有两位我没有得到:

  1. 如果在第2行中的int(s)中定义了“s”,即使它是在for循环之前输入的吗?
  2. 为什么这段代码在没有else / return / pass / etc的情况下起作用。 if语句的inplace参数?
  3. 此代码基本上执行以下操作:

    ['23', '11', '2']

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之后的条件为真 - 该元素确实是一个数字。