我有以下三个列表:
x = [
(u'http://imdb.com/title/tt0926129/', None, None),
(u'http://imdb.com/title/tt0926129/', None, None)
]
y = [(1,), (2,), (1,)]
z = [(1,), (2,)]
我如何编写一个函数来查看是否有大多数相同的答案。在上述情况中:
has_consensus(x) ==> True
has_consensus(y) ==> True
has_consensus(z) ==> False
我正在考虑做一个.match()
,迭代一个forloop,但我认为这可能会让人感到有些困惑。做上述事情的最佳方法是什么?
答案 0 :(得分:2)
Counter
课程会让这很简单。
>>> from collections import Counter
>>> Counter(x).most_common(1)[0]
(('http://imdb.com/title/tt0926129/', None, None), 2)
>>> Counter(y).most_common(1)[0]
((1,), 2)
>>> Counter(z).most_common(1)[0]
((2,), 1)
您需要做的就是检查最常见的元素是否出现超过50%的时间。
def has_consensus(l):
return Counter(l).most_common(1)[0][1] * 2 > len(l)
示例:
>>> has_consensus(x)
True
>>> has_consensus(y)
True
>>> has_consensus(z)
False