擅长:python、mysql、java
<p>我会这样做的:</p>
<pre><code>seen = set()
cond = [x for x in c if x[3] not in seen and not seen.add(x[3])]
</code></pre>
<p>说明:</p>
<p><code>seen</code>是一个集合,它跟踪每个子列表中已经遇到的第四个元素。
<code>cond</code>是压缩列表。如果<code>x[3]</code>(其中<code>x</code>是<code>c</code>中的子列表)不在<code>seen</code>中,<code>x</code>将被添加到{<cd2>}中,<code>x[3]</code>将被添加到{<cd1>}。在</p>
<p><code>seen.add(x[3])</code>将返回<code>None</code>,因此<code>not seen.add(x[3])</code>将始终是{<cd14>},但是只有当{<cd15>}是{<cd14>}时,才会计算该部分,因为Python使用短路求值。如果对第二个条件求值,它将始终返回<code>True</code>,并产生将<code>x[3]</code>添加到<code>seen</code>的副作用。下面是另一个正在发生的事情的示例(<code>print</code>返回{<cd12>}并具有打印某些内容的“副作用”):</p>
^{pr2}$