如何在列表中有效地找到赔率?

时间:2014-02-25 16:27:16

标签: python list

说我有一个像

这样的清单
>>> l = [-10,-10,-10,-20,-10,-10]

鉴于你不知道它是-20,我想在一行或两行中找到-20的位置和数量。有什么想法吗?

4 个答案:

答案 0 :(得分:4)

这将找到最不常见的元素:

>>> my_list = [-10,-10,-10,-20,-10,-10]
>>> from collections import Counter
>>> counter = Counter(my_list)
>>> min(counter, key=counter.get)
-20

要查找位置,您可以使用my_list.index(min(counter, key=counter.get))

请注意,这不适用于[1, 2, 9999, 3, 4]等列表中的奇数输出,您可能希望查看我的答案here以查找此类案例。

答案 1 :(得分:2)

假设您要查找仅出现一次的项目:

>>> from collections import Counter
>>> l = [-10,-10,-10,-20,-10,-10]
>>> [i for i, n in Counter(l).iteritems() if n == 1]
[-20]

答案 2 :(得分:1)

print min(l,key=l.count)

但它可能不那么快

from collections import Counter
from operator import itemgetter
print min(Counter(l).items(), key = itemgetter(1))[0]

可能会更快

from itertools import takewhile
print l[len(list(takewhile(lambda x:l.count(x) != 1,l)))]

可能是最有效的方法......好吧我不知道Counter也应该很快

答案 3 :(得分:0)

如果您使用的是早于2.7的Python版本,则尚未安装Counter。如果是这种情况,那么答案可以在Get the key corresponding to the minimum value within a dictionary

找到
mydict = dict((elem, my_list.count(elem)) for elem in my_list)
mymin = min(mydict, key=mydict.get)

print mydict
print mymin

输出:

{-20:1, -10:5}
-20