【问题标题】:Python - "slashList = [i for i, ind in enumerate(start) if ind == '/']" [closed]Python - “slashList = [i for i, ind in enumerate(start) if ind == '/']” [关闭]
【发布时间】:2014-12-08 08:23:38
【问题描述】:

我 4 周前刚开始学习编程。我阅读了“Learn Python the hard way”一书,目前正在阅读“Learn Raspberry Pi programming with Python”一书。我上面写的代码完全让我感到困惑,我似乎无法理解它。这本书指出它列出了斜杠的索引(我正在研究一个网络机器人)。我只是从未在 for 循环中看到过这样的格式。为什么for前面有一个变量?请解释(请用英文:D)。

谢谢,

迈克尔

【问题讨论】:

标签: python for-loop raspberry-pi web-crawler


【解决方案1】:

这是一个列表推导式,一种在 Python 中运行循环以构建列表的更紧凑的方式。

写这篇文章的方法很长:

SlashList = []
for i, ind in enumerate(start):
    If ind == '/':
       SlashList.append(i)

ind 是列表“start”中字段值的名称,i 是 ind 的索引(或列表中的位置)

而 'ind' 和 'start' 是特别无用的变量名,可能会增加对这一行的理解的混乱 :-)

【讨论】:

  • 非常感谢,这真的很有帮助。所以基本上如果 start 是一个 URL,枚举会为 URL 中的每个字符分配一个数字,然后 for 循环迭代 i(数字)和 ind(字符)这是正确的吗?
  • 是的,但请注意 enumerate 适用于列表,而不是字符串,因此 start 必须是使用 enumerate 的列表,而不是字符串。也许在你的代码中更高的地方,字符串 url 正在变成一个列表。如果 start 是一个字符串,那么你可以很容易地将它变成一个字符列表: list(start) - 所以在上面的代码中动态执行就像:for i, ind in enumerate(list(start )):
【解决方案2】:

括号内的“for循环”称为“列表推导”。

这里它迭代enumerate(start),它是一个迭代器,为给定的可迭代项的每个项生成一个 (index, item) 元组。

这个迭代器被迭代,将索引放入i,将字符放入ind(这是令人困惑的,可变的)。对于每个项目,如果它是/,则索引被接管到最终列表中,因此最后,列表包含字符串中斜杠的所有索引(?)start

【讨论】:

    【解决方案3】:

    它和下面的代码做同样的事情:

    slashList = []
    i = 0
    for ind in start:
        if ind == '/':
            slashList.append(i)
        i += 1
    

    它使用一些技巧将所有内容压缩到一条线上。第一个称为list comprehension。它可以让您在不将@​​987654324@ 循环和if 语句拆分到不同行的情况下创建一个列表。第二个是enumerate 内置函数。它可以让您在像start 这样的可迭代对象中获取每个项目的索引i,同时获取项目本身(此处分配给ind)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-11
      • 1970-01-01
      • 2021-04-18
      • 2011-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多