假设我有一个列表,我怎样才能编写一个优雅的单行来计算列表中少数类的百分比?
例如,对于list1 = [1,1,1,-1,-1]
,少数类是-1
。列表中-1
的百分比为2/5=0.4
对于另一个列表list2 = [1,-1,-1,-1,-1]
,少数类是1
。列表中1
的百分比为1/5=0.2
答案 0 :(得分:2)
您可以使用Counter
:
from collections import Counter
nums = [1,-1,-1,-1,-1]
# if using Python 2 use float(len(nums))
print(Counter(nums).most_common()[-1][-1] / len(nums))
>> 0.2
Counter.most_common()
会返回从最常见到最不常见的(element, count)
形式的元组列表,因此most_common()[-1][-1]
会返回最不常见的元素。
如果有几个少数族裔,其中一个将被任意选择进行计算。例如,使用我的nums = [3, 3, -1, 1, 2]
代码也会返回0.2
,使用-1
,1
或2
进行计算。
答案 1 :(得分:1)
import collections
list1 = [1,1,1,-1,-1]
p = min(collections.Counter(list1).values())*1.0/len(list1)
print(p)
# Output
0.4
collections.Counter(list1)
使用键:值对element:frequency
返回一个dict。在这种情况下,它将是Counter({1: 3, -1: 2})
。