本质上,您希望对多件套(即袋子)进行差异 *** 作。Python为
collections.Counter对象实现了这一点:
提供了几种数学运算来组合Counter对象以产生多组(计数大于零的counter)。加减法通过将相应元素的计数相加或相减来组合计数器。交集和并集返回相应计数的最小值和最大值。每个 *** 作都可以接受带符号计数的输入,但是输出将排除计数为零或更少的结果。
因此,例如:
>>> list1 = ["25","+","7","*","6","/","7"]>>> list2 = ["7","*","6"]>>> list((Counter(list1) - Counter(list2)).elements())['25', '+', '7', '/']
在Python
3.6及更高版本中,这将是有序的(尽管目前尚不能保证,并且可能应将其视为实现细节)。如果订单很重要,并且您没有使用此版本,则可能必须实现有序计数器。
确实,文档本身提供了这样一个配方:
>>> from collections import Counter, OrderedDict>>> class OrderedCounter(Counter, OrderedDict):... 'Counter that remembers the order elements are first encountered'... def __repr__(self):... return '%s(%r)' % (self.__class__.__name__, OrderedDict(self))... def __reduce__(self):... return self.__class__, (OrderedDict(self),)...>>> list((OrderedCounter(list1) - OrderedCounter(list2)).elements())['25', '+', '/', '7']
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)