我是 Python 新手,对 Python 官方文档中的一段代码感到困惑。
unique_words = set(word for line in page for word in line.split())
Run Code Online (Sandbox Code Playgroud)
对我来说,它看起来相当于:
unique_words=set()
for word in line.split():
for line in page:
unique_words.add(word)
Run Code Online (Sandbox Code Playgroud)
在嵌套循环中定义 line 之前,如何在第一个循环中使用它?然而,它确实有效。我认为这表明嵌套列表理解和生成器表达式的顺序是从左到右,这与我之前的理解相矛盾。
任何人都可以为我澄清正确的顺序吗?
我有以下嵌套列表:
items = [
[{'URL': '1234', 'ID': 1}, {'URL': '2222', 'ID': 2}],
[{'URL': '12344321', 'ID': 2}]
]
Run Code Online (Sandbox Code Playgroud)
我怎样才能获得所有网址?
到目前为止,我尝试过:
urls = [i['URL'] for i in item for item in items]
Run Code Online (Sandbox Code Playgroud) 我知道for在嵌套列表中理解的正确方法如下(Python 3):
lista = [[[1,2],[3],[4,5,6]],[[7],[8,9]]]
flatlista = [i for k in lista for j in k for i in j]
# results with [1, 2, 3, 4, 5, 6, 7, 8, 9]
Run Code Online (Sandbox Code Playgroud)
但我的自然语言本能强烈反对.我会(错误地)期望代码是:
flatlista = [i for i in j for j in k for k in lista]
Run Code Online (Sandbox Code Playgroud)
错误的版本听起来几乎像英语,从左到右读取一个流.正确的版本需要一些嵌套的阅读技巧,左右跳过以涵盖其含义.
为什么这样的语法呢?为什么用这种方式构建语言?