<p>可以使用第一个列表上的迭代器来完成此操作,迭代器将告诉您跳过第二个列表中的哪些元素(假设两个列表都已排序):</p>
<pre><code>def removeList(listA,listB):
iterA = iter(listA)
valueA = next(iterA,None)
result = []
for valueB in listB:
if valueB == valueA:
valueA = next(iterA,None)
else:
result.append(valueB)
return result
</code></pre>
<p>输出:</p>
<pre><code>a = [1, 1, 3, 3, 4, 4, 5, 5]
b = [1, 1, 3, 3, 4, 4, 5, 5, 5, 6, 7, 7, 34, 45, 56, 65, 432, 543, 723]
c = removeList(a,b)
print(c)
# [5, 6, 7, 7, 34, 45, 56, 65, 432, 543, 723]
</code></pre>
<p>[编辑]如果列表A中可能存在列表B中不存在的数字,则需要调整方法以跳过这些值:</p>
<pre><code>def removeList(listA,listB):
iterA = iter(listA)
valueA = next(iterA,None)
result = []
for valueB in listB:
while valueA is not None and valueA < valueB:
valueA = next(iterA,None) # skip values in listA that are not in listB
if valueB == valueA:
valueA = next(iterA,None)
else:
result.append(valueB)
return result
a = [1, 1, 3, 3, 4, 4, 4, 5, 5, 8]
b = [1, 1, 3, 3, 4, 4, 5, 5, 5, 6, 7, 7, 34, 45, 56, 65, 432, 543, 723]
c = removeList(a,b)
print(c)
# [5, 6, 7, 7, 34, 45, 56, 65, 432, 543, 723]
</code></pre>