擅长:python、mysql、java
<p>一般来说,<code>all</code>是一个有用的构造,我可以理解为什么它在这个表达式中看起来是错误的</p>
<pre><code>all(list(lightsOnOff.values())[:light])
</code></pre>
<p>但难闻的部分实际上是<code>list(iterable)[:number]</code>结构,它强制构建整个列表,然后将其截断。你知道吗</p>
<p><strong>作为一个重要的旁白,如果<code>lightsOnOff</code>是<code>dict</code>(不是例如<code>OrderedDict</code>),那么您的代码将是不确定的(见底部的注释)。</strong></p>
<p>如果不想创建列表并对其进行切片,可以利用itertools:</p>
<pre><code>from itertools import islince
...
all(islice(lightsOnOff.values(), n))
</code></pre>
<hr/>
<p>作为一个框架挑战,如果你的dict有一个顺序并且你知道关键点,你可以简单地重写它为:</p>
<pre><code>all(lightsOnOff[k] for k in keys[:light])
</code></pre>
<p>如果你的dict有有序的键,比如整数,就用一个列表?你知道吗</p>
<pre><code>all(listOfLights[:light])
</code></pre>