我想从列表中获取元素,例如
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)
但是我在某个我不知道的地方失败了
答案 0 :(得分:1)
我认为您可能会发现 collections.Counter
在这里是一个有用的模块。它生成一个字典,其中数组中的每个唯一项目作为键,该项目在数组中出现的次数作为值。例如,如果您有数组 ['a', 'b', 'c', 'b']
,则 Counter(['a', 'b', 'c', 'b']) => {'a': 1, 'b': 2, 'c': 1}
因此,出于您的目的,您应该为 objects
数组创建一个计数器,然后使用它来确定 appeared_elements
中的一个出现在 objects
数组中的频率。< /p>
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
}