<p>我在我正在处理的模块中发现了以下代码:</p>
<pre><code>l = opaque_function()
thingys = [x for y in l for x in y]
</code></pre>
<p>我看不懂这个。通过实验,我能够确定它是扁平化一个2级嵌套列表,但是syntex对我来说仍然是不透明的。它显然省略了一些可选的括号。在</p>
^{pr2}$
<p>我的眼睛想把它解析为:<code>[x for y in [l for x in y] ]</code>或<code>[ [x for y in l] for x in y ]</code>,但是这两个都失败了,因为<code>y</code>没有被定义。在</p>
<p>我该怎么读这个?在</p>
<p>(我想当我解释这件事的时候我会感到很尴尬。)</p>
<p>这曾经让我很困惑。你应该像一个嵌套的循环一样阅读它:</p>
<pre><code>new_list = []
for y in l:
for x in y:
new_list.append(x)
</code></pre>
<p>变成</p>
^{pr2}$
<p>变成</p>
<pre><code>[x for y in l for x in y]
</code></pre>