非保序使用collections.Counter
:
from collections import Counter
a = Counter([1, 2, 2, 3])
b = Counter([2, 3])
res = list(a - b)
# [1, 2]
此操作,因为一个Counter
的-
方法移除从输出其中b
存在的计数大于在a
计数等于或大于任何元件。
订购使用OrderedCounter
保持,然后手动生成列表,例如:
from collections import Counter, OrderedDict
class OrderedCounter(Counter, OrderedDict):
pass
a = OrderedCounter([3, 2, 2, 1])
b = Counter([2, 3])
res = [k for k, v in a.items() if v - b[k] > 0]
# [2, 1]
最后,如果原来的范围包含非唯一值,以及你想要的元素重复的次数是减法,那么后遗留下来的:
from collections import Counter, OrderedDict
class OrderedCounter(Counter, OrderedDict):
pass
a = OrderedCounter([3, 3, 2, 2, 2, 1])
b = Counter([2, 3])
res = [k for k, v in a.items() for _ in range(v - b[k])]
# [3, 2, 2, 1]
你关心结果列表中的元素排序吗? – soon
检查:http://stackoverflow.com/questions/4211209/remove-all-the-elements-that-occur-in-one-list-from-another – pathoren
你是否只想保留一次显示的元素l1比l2?如果是这样,那么在l1中为每个事件保留这个元素? – Moberg