Python:查找在另一个列表中包含次数最少的列表元素

时间:2014-04-15 09:42:39

标签: python list

所以我列出了可能的元素:

elems = ['a', 'b', 'c', 'd']

然后我从第一个列表中选择了另一个随机项目列表 像(例如):

items = ['a', 'a', 'c', 'a', 'c', 'd']

elems中,找出items中哪个元素最少包含的Pythonic方法是什么?
在此示例中,它是'b',因为它根本不包含在items中。

3 个答案:

答案 0 :(得分:2)

<强>短

print(min(elems, key=items.count)) # b

相对较短且效率(仅在您确定elems没有重复项时

的情况下使用它

from collections import Counter
c = Counter(items + elems)
print(c.most_common()[-1][0]) # b

效率很高

d = {x: 0 for x in elems} 
for x in items:
    d[x] += 1

print(min(d, key=d.get)) # b

另一个&#34;效率很高&#34;

from collections import defaultdict
d = defaultdict(int) 
for x in items:
    d[x] += 1

print(min(elems, key=d.__getitem__)) 
# or print(min(elems, key=lambda x: d[x])) - gives same result

答案 1 :(得分:1)

>>> from collections import Counter
>>> elems = ['a', 'b', 'c', 'd']
>>> items = ['a', 'a', 'c', 'a', 'c', 'd']
>>> c = Counter(dict.fromkeys(elems, 0))
>>> c.update(Counter(items))
>>> c
Counter({'a': 3, 'c': 2, 'd': 1, 'b': 0})
>>> min(c, key=c.get)
'b'

答案 2 :(得分:0)

最快的方法是制作一个带有计数的字典:

aDict = { k:0 for k in elems }
for x in items: 
  if x not in aDict: aDict[x] = 0 
  aDict[x] += 1 

print min(aDict, key=aDict.get)