J'ai une liste de fichiers
for i in resl: if resl.count(i) > 500: resl2.append(i) print(resl2)
Il y a plus de 700 000 éléments et je dois les trier par fréquence pour voir le fichier le plus consulté et le fichier le moins consulté.
example_list = [7.gif, 8.gif, 123.html]
Quand je lance ceci, il ne se compile jamais. Et j'ai essayé d'autres méthodes mais aucun résultat.
4 Réponses :
Notez que i
représente un élément du tableau et non un entier
for i in range(0,len(resl)-1): if i > 500: resl2.append(resl[i]) print(resl2)
Remplacez-le par ceci.
for i in resl: if resl.count(i) > 500: resl2.append(i) print(resl2)
Votre algorithme est inutilement le temps quadratique. Ce qui suit est linéaire
resl2 = [(k,v) for k,v in Counter(resl).items() if v > 500] resl2.sort(key=lambda kv: kv[1]) resl2 = [k for k,v in resl2]
Si vous avez besoin de les trier, faites quelque chose comme
from collections import Counter resl2 = [k for k,v in Counter(resl).items() if v > 500]
alors ce code trie-t-il également par nombre le plus élevé? ou simplement les ajouter à la liste dans n'importe quel ordre sur plus de 500 occurrences?
Non, il ne trie pas par nombre, mais vous pouvez évidemment le faire
Vous pouvez faire cette astuce en utilisant un set
;)
Ici vous avez un exemple minimal pour une liste de fichiers et montrant quand il apparaît 2 fois:
[f for n,f in sorted(zip(files_freq, file_set), key=lambda x: x[0], reverse=True) if n >= 2]
et la sortie sera: ['0.gif', '0.doc']
Le set
sera filtrer la liste uniquement aux occurrences uniques de chaque fichier et la boucle calculera le nombre de chaque fichier.
Après, la compréhension de la liste effrayante est le truc !
XXX
Cela créera une liste uniquement avec les fichiers apparus 2 fois ou plus, puis la partie clé
force la fonction trié
à utiliser le premier files_freq
de zip (files_freq, file_set)
à faire le tri et reverse
est de trier la liste par ordre descendant, en affichant les fréquences les plus élevées avant.
c'est encore le temps quadratique
De votre commentaire :
J'ai juste besoin de savoir quel fichier est le plus fréquent.
Donc:
statistics.mode(example_list)
Il s'agit de déterminer tous les fichiers qui se produisent plus de 500 fois. J'ai juste besoin de savoir quel fichier se produit le plus.
Il se compile, c'est juste très lent, car votre algorithme prend un temps quadratique