Python - " slashList = [i for i,ind in enumerate(start)if ind ==' /']"

时间:2014-12-08 08:23:38

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

我刚刚开始学习编程4周前。我读了“艰难学习Python”这本书,目前正在学习“用Python学习Raspberry Pi编程”。我上面写的代码完全让我困惑,我似乎无法绕过它。该书声明它列出了斜杠的索引(我正在研究一个Web机器人)。我在for循环中从未见过这样的格式。为什么前面有变量?请解释(请用英文说明:D)。

谢谢,

迈克尔

3 个答案:

答案 0 :(得分:0)

括号内的“for循环”称为“列表理解”。

这里迭代enumerate(start),这是一个迭代器,为给定的迭代项中的每一项产生一个(索引,项)元组。

迭代这个迭代器,将索引放入i,将字符放入ind(这是混乱的,可变的)。对于每个项目,如果它是/,索引将被接收到最终列表中,以便最后,列表包含字符串中斜杠的所有索引(?)start

答案 1 :(得分:0)

它与以下代码完全相同:

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

它使用一些技巧将所有内容挤到一行。第一个称为list comprehension。它允许您创建一个列表,而不会将for循环和if语句分成不同的行。第二个是enumerate内置函数。它允许您在项目(此处,分配给i)本身的同时获取start之类的可迭代项目中的每个项目的索引ind

答案 2 :(得分:0)

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

写这篇文章的漫长道路是:

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

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

'ind'和'start'是特别无益的变量名称可能会增加理解这一行的困惑: - )