擅长:python、mysql、java
<p><code>finalList</code>在您的列表理解中始终是一个<em>空的</em>列表,即使您认为它是在此期间附加到它的,这与第二个代码(双<code>for</code>循环)的情况不同。在</p>
<p>我要做的是使用<code>set</code>:</p>
<pre><code>>>> set(i for sub_l in x for i in sub_l)
{1, 2, 3}
</code></pre>
<p><strong>编辑:</strong>
另一方面,如果订单很重要,并接近您的尝试:</p>
^{pr2}$
<p>或者</p>
<pre><code>>>> list(map(lambda x: final_list.append(x) if x not in final_list else None, x_flat))
[None, None, None, None] #useless list thrown away and consumesn memory
>>> f
[1, 2, 3]
</code></pre>
<p><strong>编辑2:</strong>
正如<a href="https://stackoverflow.com/users/3620003/timgeb">timgeb</a>所提到的,显然<code>map</code>&;<code>filter</code>将丢弃那些最终无用的列表,它们消耗内存。因此,我将使用<code>nested for</code>循环,就像您在上一个代码示例中所做的那样,但是如果您希望使用列表理解方法,那么:</p>
<pre><code>>>> x_flat = [i for sub_l in x for i in sub_l]
>>> final_list = []
>>> for number in x_flat:
if number not in final_list:
finalList.append(number)
</code></pre>