<p>是的,<code>list.sort()</code>的返回值总是<code>None</code>,列表理解取列表中每个项的初始表达式的值。在例如<code>[x for x in list]</code>的情况下,初始表达式是<code>x</code>,因此<code>x</code>的值被放入结果列表中。在<code>[x.sort() for x in lists]</code>的情况下,初始表达式是<code>x.sort()</code>,因此<code>x.sort()</code>(即<code>None</code>)的值进入结果列表。当然,子列表是先排序的。你知道吗</p>
<p>您可以使用<code>sorted()</code>内置函数制作一个排序后的副本以放入列表:</p>
<pre><code>[sorted(x) for x in lists]
</code></pre>
<p>或者可以使用此构造首先调用<code>x.sort()</code>,然后返回<code>x</code>,将排序后的<code>x</code>放入结果列表:</p>
<pre><code>[x.sort() or x for x in lists]
</code></pre>
<p>这是因为<code>x.sort()</code>总是返回<code>None</code>,<code>None</code>是false,所以<code>or</code>的另一个分支总是被求值并返回值<code>x</code>。你知道吗</p>
<p>您可以做的最后一件事是只使用生成器表达式并让它被<code>any()</code>内置函数使用。你知道吗</p>
<pre><code>any(x.sort() for x in lists)
</code></pre>
<p>这会对每个子列表进行排序,但不会对它们消失的<code>None</code>值做任何处理。未创建新列表。<code>any()</code>在第一个truthy值处停止,并且从不存在任何truthy值,因为<code>x.sort()</code>总是返回<code>None</code>,这是错误的,因此在这种情况下<code>any()</code>保证遍历整个生成器。<code>any()</code>返回<code>True</code>或(在本例中)<code>False</code>,我们也将其丢弃。因此您会发现<code>lists</code>中的每个子列表都已排序,<code>lists</code>包含子列表的顺序与之前相同,因为它没有更改。基本上与以下内容相同:</p>
<pre><code>for x in lists: x.sort()
</code></pre>