相关疑难解决方法(0)

python中嵌套列表理解和嵌套生成器表达式的顺序

我是 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 之前,如何在第一个循环中使用它?然而,它确实有效。我认为这表明嵌套列表理解和生成器表达式的顺序是从左到右,这与我之前的理解相矛盾。

任何人都可以为我澄清正确的顺序吗?

python list-comprehension generator

5
推荐指数
1
解决办法
5160
查看次数

多列表理解

我有以下嵌套列表:

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)

python

1
推荐指数
1
解决办法
48
查看次数

为什么多个`for`列表理解的顺序是这样的?

我知道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)

错误的版本听起来几乎像英语,从左到右读取一个流.正确的版本需要一些嵌套的阅读技巧,左右跳过以涵盖其含义.

为什么这样的语法呢?为什么用这种方式构建语言?

python syntax python-3.x

1
推荐指数
1
解决办法
183
查看次数