J'ai besoin d'aide pour écrire une fonction findMode (aList) qui accepte une liste d'éléments comme paramètre, et procède à la recherche du mode. Cependant, votre solution Python doit utiliser un dictionnaire pour suivre les éléments et leurs décomptes comme méthode de recherche du mode (pas des listes parallèles).
Voici le code que j'ai déjà essayé:
>>> findMode([4,3,4,3,2,1,4,5,3,3,4,5,1,4,1,4,5]) [4] >>> findMode(["horse ", "cat ", "dog ", "turtle ","horse ", "cat ", "dog ", "turtle "]) ['horse ', 'cat ', 'dog ', 'turtle ']
Voici quelques exemples du résultat souhaité:
def findMode(aList):
aList.sort()
position = 0
largestCount = 0
listLength = len(aList)
while(position <= listLength):
count = aList.count(aList[position])
if(count > largestCount):
largestCount = count
valuePosition = aList[position]
position += count
return aList[valuePosition]
3 Réponses :
Cela devrait faire l'affaire:
from collections import Counter
def findMode(aList):
counter = Counter(aList)
max_count = max(counter.values())
return [item for item, count in counter.items() if count == max_count]
Battez-moi comme 30 secondes!
Et moi. :-) Je l'ai dans mon presse-papiers.
def findMode(aList):
dic_freq = {}
for element in aList:
if element not in aList.keys():
dic_freq[element] = 1
else:
dic_freq[element] += 1
mode = [el for el in dic_freq.keys() if dic_freq[el] == max(dic_freq.values())]
return mode
You can do it faster without dictionary but it works that way
vous pouvez utiliser defaultdict pour éviter cet si l'élément n'est pas dans aList.keys (): dic_freq [element] = 1
from collections import defaultdict
def findMode(aList):
dic = defaultdict(int)
for i in aList:
dic[i]+=1
mv = max(dic.values())
return [i for i in dic if dic[i]==mv]
findMode([4,3,4,3,2,1,4,5,3,3,4,5,1,4,1,4,5])
# output [4]
findMode(["horse ", "cat ", "dog ", "turtle ","horse ", "cat ", "dog ", "turtle "])
# output ['horse ', 'cat ', 'dog ', 'turtle ']
Votre "sortie" pour la première liste ne semble pas correcte. :-)