Python 巨蟒;slashList=[i代表i,如果ind==';/';],则枚举(开始)中的ind;

Python 巨蟒;slashList=[i代表i,如果ind==';/';],则枚举(开始)中的ind;,python,for-loop,raspberry-pi,web-crawler,Python,For Loop,Raspberry Pi,Web Crawler,我4周前才开始学习编程。我读了《艰苦学习Python》一书,目前正在学习《用Python学习Raspberry Pi编程》。我上面写的代码完全把我弄糊涂了,我似乎无法理解它。这本书列出了斜杠的索引(我正在开发一个web机器人)。我只是在for循环中从未见过这样的格式。为什么for前面有一个变量?请解释(请用英语:D) 谢谢 Michael括号内的“for循环”称为“列表理解” 这里它迭代enumerate(start),这是一个迭代器,为给定的iterable的每个项生成一个(index,ite

我4周前才开始学习编程。我读了《艰苦学习Python》一书,目前正在学习《用Python学习Raspberry Pi编程》。我上面写的代码完全把我弄糊涂了,我似乎无法理解它。这本书列出了斜杠的索引(我正在开发一个web机器人)。我只是在for循环中从未见过这样的格式。为什么for前面有一个变量?请解释(请用英语:D)

谢谢

Michael

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

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


迭代该迭代器,将索引放入
i
,将字符放入
ind
(这很容易混淆,变量方面)。对于每个项目,如果它是一个
/
,索引将被接收到最终列表中,以便在最后,列表包含字符串(?)
start

中斜杠的所有索引。它执行与以下代码相同的操作:

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

它使用了一些技巧来将所有内容压缩到一行。第一种称为a。它允许您创建一个列表,而无需将
for
循环和
if
语句分解到不同的行中。第二个是内置函数。它可以让您在像
start
这样的iterable中获得每个项的索引
i
,同时获得该项(这里,分配给
ind
)本身。

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

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

SlashList = []
for i, ind in enumerate(start):
    If ind == '/':
       SlashList.append(i)
其中ind是列表“start”中字段值的名称,i是ind的索引(或列表中的位置)


“ind”和“start”这两个变量名对理解这一行毫无帮助,这可能会增加理解这一行的混乱:-)

这就是所谓的列表理解,我想你会在互联网上找到大量解释这一点的文字。非常感谢,这真的很有帮助。所以基本上,如果开始是一个URL,enumerate会给URL中的每个字符分配一个数字,for循环会在i(数字)和ind(字符)上迭代,这是正确的吗?是的,但请注意enumerate在列表上工作,而不是字符串,所以开始必须是一个列表才能使用enumerate,而不是字符串。也许在代码中更高的地方,字符串url被转换成一个列表。如果start是一个字符串,那么可以使用:list(start)很容易地将其转换为字符列表——因此在上面的代码中动态地这样做就像:对于i,枚举中的ind(list(start)):