如何从基于另一个列表的列表中筛选元素并获取百分比



我想从等列表中获取元素

appeared_elements = ['blue-sky','road','white-horse','green-field','tree','dusthaze-sky','brown-horse','yellow-field','black-bison','green-field','dusthaze-sky','dusthaze-sky','blue-sky','snowy-field'] 

并返回这些元素在另一个列表中出现的次数的频率

objects = ['black-bison', 'elephant', 'white-horse', 'brown-horse', 'scarlet-ibis', 'black-ibis', 'white-ibis', 'blue-sky', 'overcast-sky', 'cloudy-sky', 'dusthaze-sky', 'rocky-mountain', 'snowy-mountain', 'birdseye-building', 'perspective-building', 'front-building', 'red-flower', 'purple-flower', 'pink-flower', 'sand', 'tree', 'green-field', 'snowy-field', 'yellow-field', 'road', 'tower', 'blue-ocean', 'green-cliff', 'black-cliff', 'waterfall']

我想出了一个解决方案。。。

def printPercentages(appeared_elements, objects):
for n in objects:
soma = len([m for m if n in appeared_elements])/len(appeared_elements)
print(soma)

但我在某个地方失败了,我还不知道在哪里

我想您可能会发现collections.Counter是一个有用的模块。它生成一个字典,其中数组中的每个唯一项都是键,该项在数组中出现的次数是值。例如,如果您有数组['a', 'b', 'c', 'b'],那么Counter(['a', 'b', 'c', 'b']) => {'a': 1, 'b': 2, 'c': 1}

因此,出于您的目的,您应该为objects数组创建一个计数器,然后使用它来确定其中一个appeared_elementsobjects数组中出现的频率。

from collections import Counter
def printPercentages(objects, appeared_elements):
counter = Counter(objects)
soma = {}
for e in appeared_elements:
soma[e] = (counter.get(e) or 0)/len(objects) * 100 # this will give you the freq of each element saved to a dictionary so you can see them all.
print(soma)

对于您提供的样本数据,您的输出将是:

{
"black-bison": 7.142857142857142,
"elephant": 0.0,
"white-horse": 7.142857142857142,
"brown-horse": 7.142857142857142,
"scarlet-ibis": 0.0,
"black-ibis": 0.0,
"white-ibis": 0.0,
"blue-sky": 14.285714285714285,
"overcast-sky": 0.0,
"cloudy-sky": 0.0,
"dusthaze-sky": 21.428571428571427,
"rocky-mountain": 0.0,
"snowy-mountain": 0.0,
"birdseye-building": 0.0,
"perspective-building": 0.0,
"front-building": 0.0,
"red-flower": 0.0,
"purple-flower": 0.0,
"pink-flower": 0.0,
"sand": 0.0,
"tree": 7.142857142857142,
"green-field": 14.285714285714285,
"snowy-field": 7.142857142857142,
"yellow-field": 7.142857142857142,
"road": 7.142857142857142,
"tower": 0.0,
"blue-ocean": 0.0,
"green-cliff": 0.0,
"black-cliff": 0.0,
"waterfall": 0.0
}

最新更新