我想尝试一下OrderedCounter
以避免重复.count()
calls:
from collections import OrderedDict, Counter
col=[['red', 'yellow', 'blue', 'red', 'green', 'yellow'],['pink', 'orange', 'brown', 'pink', 'brown']]
class OrderedCounter(Counter, OrderedDict):
pass
new = [[k for k, v in OrderedCounter(el).iteritems() if v != 1] for el in col]
# [['red', 'yellow'], ['pink', 'brown']]
如果我们只想迭代一次,那么(类似于 Martijn 的 - 加上更少的集合):
from itertools import count
def unique_plurals(iterable):
seen = {}
return [el for el in iterable if next(seen.setdefault(el, count())) == 1]
new = map(unique_plurals, col)
这在指定需要出现的次数方面更加灵活,并保留一个dict
而不是多个set
s.