如何找到答案的共识

时间:2014-12-12 20:29:42

标签: python

我有以下三个列表:

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,但我认为这可能会让人感到有些困惑。做上述事情的最佳方法是什么?

1 个答案:

答案 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