<p>您可以使用列表理解</p>
<pre class="lang-py prettyprint-override"><code>l3 = [(i and j) for i,j in zip(l1,l2)]
l4 = [(i or j) for i,j in zip(l1,l2)]
</code></pre>
<p>当你在做</p>
<pre class="lang-py prettyprint-override"><code>l3 = l1 and l2
l4 = l1 or l2
</code></pre>
<p>然后它就变成了</p>
<pre class="lang-py prettyprint-override"><code>l3 = bool(l1) and l2
l4 = bool(l1) or l2
</code></pre>
<p>既然<code>l1</code>是非空列表,那么
<code>bool(l1) = True</code></p>
<p>现在,我假设在<code>l3 = l1 and l2</code>的情况下,<code>l1</code>被计算为<code>True</code>,因此对于<code>short circuit evaluation</code>,它返回<code>l2</code></p>
<p>在<code>l4 = l1 or l2</code>的情况下,同样由于<code>short circuit evaluation</code>,返回<code>l1</code>,因为<code>l1</code>是<code>True</code></p>
<p>所以,你得到的结果是这样的。
<code>short circuit evaluation</code>不过是</p>
<ol>
<li>在<code>A and B</code>的情况下,如果A的计算结果为True,则继续计算B并返回B的结果。如果A的计算结果为False,则不计算B。返回A的结果</li>
</ol>
<pre class="lang-py prettyprint-override"><code>False and print('hello')
>>> False
True and print('hello')
>>> hello
</code></pre>
<ol start=“2”>
<li>在<code>A or B</code>的情况下,如果A的计算结果为True,那么计算B没有意义。只需返回A的结果。如果A的计算结果为False,则返回B的结果</li>
</ol>
<pre class="lang-py prettyprint-override"><code>True or (1/0)
>>> True
False or (1/0)
>>> ZeroDivisionError: division by zero
</code></pre>
<hr/>
<p>注:</p>
<pre class="lang-py prettyprint-override"><code>bool([]) = False
bool([1,2,'a']) = True
bool(['False']) = True
</code></pre>
<hr/>