擅长:python、mysql、java
你应该避免从中间的列表中删除。它将给你多项式时间的复杂性,而且是有点棘手的得到正确的。当您在列表上进行迭代时,从列表中删除项目通常会导致您跳过项目,因为列表的大小会发生变化。但是,可以通过在序列上向后迭代来安全地执行此操作:</p>
<pre><code>>>> list1 = [6, 7, 8, 9]
>>> list2=['0009', '0001', '0008', '0003', '0004', '0005', '0006', '0007']
</code></pre>
<p>然后简单地说:</p>
<pre><code>>>> for i in reversed(range(len(list2))):
... item = list2[i]
... if any(int(c) in list1 for c in item):
... del list2[i]
...
>>> list2
['0001', '0003', '0004', '0005']
</code></pre>
<p>但是,创建一个新的列表作为中间层并使用它更改原来的列表几乎总是更快、更高效、更直接的:</p>
<pre><code>>>> list2[:] = [x for x in list2 if any(int(c) in list1 for c in x)]
>>> list2
['0009', '0008', '0006', '0007']
</code></pre>
<p>最后,如果要检查列表中的成员身份,请考虑改用<code>set</code>对象。检查一个项目是否在一个列表中是一个线性操作,而不是一个<code>set</code>的常数时间。你知道吗</p>