2016-05-13 98 views
1

假設我有一個列表,我該如何編寫一個優雅的單行程來計算列表中少數族裔的百分比?Python - 獲取列表中的少數族裔的百分比

例如,對於list1 = [1,1,1,-1,-1],少數類是-1。列表中的-1的百分比將是2/5=0.4

對於另一個列表list2 = [1,-1,-1,-1,-1],少數類是1。的1在列表中的百分比將1/5=0.2

+1

如果有2個「少數民族」會發生什麼? – DeepSpace

+0

如果有少於1個少數民族,這些少數民族的百分比將相同,因此無關緊要。 – Allen

回答

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。在這種情況下,它將是Counter({1: 3, -1: 2})

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()從最多到最少普遍,所以most_common()[-1][-1]返回是最常見的元素返回訂購的形式(element, count)的元組的列表。

如果有幾個少數民族,其中一個將被任意選擇用於計算。例如,使用我的密碼nums = [3, 3, -1, 1, 2]也將返回0.2,使用-1,12進行計算。

+0

'Counter(nums).most_common()[ - 1] [ - 1]/len(nums)'等於'0'。將分子或分母轉換爲'float'。 – SparkAndShine

+1

@sparkandshine請參閱我的代碼中有關使用Python 2的註釋 – DeepSpace

+0

分子和分母都是'int',因此分數爲'0'。 – SparkAndShine