Python正则表达式,在定义变量之前调用它?

Python正则表达式,在定义变量之前调用它?,python,regex,Python,Regex,我对这段代码的实际工作原理感到困惑: print([m.start() for m in re.finditer('p', word)]) 如果我只运行print语句,而不运行for循环,但保留所有其他内容,那么m就没有定义。调用m.start()方法后,如何运行for循环,并在for循环中创建变量?如果有人能把这段代码分解一下,解释一下到底发生了什么,我将不胜感激。这是同样的代码,没有使用a(循环的一行代码) 这很简单,所以让我们开始讨论如何在代码片段中表示它 re.finditer('p'

我对这段代码的实际工作原理感到困惑:

print([m.start() for m in re.finditer('p', word)])

如果我只运行
print
语句,而不运行
for
循环,但保留所有其他内容,那么m就没有定义。调用
m.start()
方法后,如何运行
for
循环,并在
for
循环中创建变量?如果有人能把这段代码分解一下,解释一下到底发生了什么,我将不胜感激。

这是同样的代码,没有使用a(循环的一行代码)

这很简单,所以让我们开始讨论如何在代码片段中表示它

re.finditer('p',word)
返回一个我们要循环的iterable

m.start()表示re.finditer('p',word)
中的m是生成器表达式。可以这样想:“对于由
re.finditer('p',word)
返回的iterable中的
m
项,由
m.start()返回的值。”。在阅读之前,不要被我们使用的
m
这个事实所困扰——这只是Python的语法是受自然语言启发的,而不是面向操作的

[m.start()代表re.finditer('p',word)]
迭代我们定义的生成器,将值放入列表中。一个常见的错误是假设我们可以将生成器视为一个列表-它不能被索引,只能迭代一次


希望有帮助

这是一个列表。老实说,我不了解这个网站。我问了一个有效的问题,具体到没有答案的地方。我的代码不够好,无法理解regex站点,我想一个熟练的程序员可能需要2分钟才能回答这个问题。有人能解释为什么这被否决了吗?问这样的问题有违文化吗?真的不明白。@khelwood非常感谢你。读了这篇文章后,我觉得我不理解regex的start方法,这就是为什么它让我如此困惑的原因。我很感激。因为你没有在运行for循环。这是一个列表理解,与regex方法没有任何关系。我真的建议您阅读这个网站,因为它对列表理解有很好的解释,这将帮助您理解它们是如何工作的。这是一个列表理解,而不是将生成器表达式放入列表中。
result_list = []
for m in re.finditer('p', word):
    result_list.append(m.start())
print(result_list)