Python - 获取列表中少数族裔类的百分比

时间:2016-05-13 21:27:17

标签: python list

假设我有一个列表,我怎样才能编写一个优雅的单行来计算列表中少数类的百分比?

例如,对于list1 = [1,1,1,-1,-1],少数类是-1。列表中-1的百分比为2/5=0.4

对于另一个列表list2 = [1,-1,-1,-1,-1],少数类是1。列表中1的百分比为1/5=0.2

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,使用-112进行计算。

答案 1 :(得分:1)

使用collections.Counter

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})