我对这段代码的实际工作方式感到困惑:
print([m.start() for m in re.finditer('p', word)])
如果我只运行print
语句而没有for
循环,但保留所有其他内容,则m未被定义。在调用for
方法之后如何运行m.start()
循环,并在for
循环中创建变量?如果有人可以分解这段代码并解释实际发生的事情,我将非常感激。
答案 0 :(得分:1)
这里是相同的代码,没有使用generator expression(单线for循环)
result_list = []
for m in re.finditer('p', word):
result_list.append(m.start())
print(result_list)
这很简单,因此让我们了解一下如何在您的代码段中表示它。
re.finditer('p', word)
返回一个我们要遍历的可迭代对象。
m.start() for m in re.finditer('p', word)
是生成器表达式。可以这样想:“ m.start()
返回的可迭代项中m
的每个项re.finditer('p', word)
返回的值”。在阅读之前,请不要担心我们使用m
的事实-这只是Python的语法受自然语言启发,而不是面向操作的。
[m.start() for m in re.finditer('p', word)]
迭代我们定义的生成器,将值放入列表中。一个常见的错误是假设我们可以将生成器视为一个列表-无法对其进行索引,并且只能对其进行一次迭代。
希望有帮助!