假設我有一個列表,我該如何編寫一個優雅的單行程來計算列表中少數族裔的百分比?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
假設我有一個列表,我該如何編寫一個優雅的單行程來計算列表中少數族裔的百分比?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
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})
。
你可以使用一個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
,1
或2
進行計算。
'Counter(nums).most_common()[ - 1] [ - 1]/len(nums)'等於'0'。將分子或分母轉換爲'float'。 – SparkAndShine
@sparkandshine請參閱我的代碼中有關使用Python 2的註釋 – DeepSpace
分子和分母都是'int',因此分數爲'0'。 – SparkAndShine
如果有2個「少數民族」會發生什麼? – DeepSpace
如果有少於1個少數民族,這些少數民族的百分比將相同,因此無關緊要。 – Allen