Je voulais savoir comment je pouvais imprimer la quantité d'articles dans une liste en Python. Par exemple:
list1 = ["hello", "goodbye", "hello"] message = ", ".join(list1) print(message)
Je voudrais que ma sortie soit "2x bonjour, 1x au revoir". Je n'ai trouvé aucune bibliothèque qui fasse quelque chose comme ça, mais je viens de commencer à coder donc il me manque peut-être quelque chose. Si vous connaissez une bibliothèque qui fait cela ou si vous avez la moindre idée de comment je pourrais le faire, je suis ouvert à tout conseil.
Merci d'avance!
Edit: merci à tous pour la grande aide. Toutes les réponses étaient utiles et ont résolu le problème.
6 Réponses :
Vous pouvez utiliser une collection Counter d'ailleurs: https://docs.python.org/3/library/collections.html#collections.Counter
Vous pouvez utiliser Counter pour ce faire:
from collections import Counter
list1 = ["hello", "goodbye", "hello"]
counts = Counter(list1)
message = ", ".join(f"{counts[key]}x {key}" for key in counts)
print(message)
Ce code utilise des chaînes f et descomphrensions de liste .
Juste pour pinailler, il n'y a pas de compréhension de liste ici, c'est une expression de générateur. Si vous en faites une compréhension de liste, elle devrait fonctionner plus rapidement .
list1 = ["hello", "goodbye", "hello"]
unique_values = set(list1)
result = []
for value in unique_values:
result.append("{}x {}".format(list1.count(value), value))
message = ", ".join(result)
print(message)
vous pouvez créer un dictionnaire avec chaque élément de votre liste comme clé du dictionnaire. puis imprimez ou utilisez le dict pour compter l'occurance.
# temp_dict will have the count for each element.
temp_dict={}
for item in list1:
if item in temp_dict.keys():
temp_dict[item]+=1
else:
temp_dict[item]=1
#temp_dict will contain the count of each element in your list1.
print(temp_dict)
for key,value in temp_dict.items():
print(str(value)+'x'+key)
@ Aplet123 a déjà donné une réponse mais si vous ne voulez pas importer Counter, vous pouvez utiliser le code ci-dessous.
list1 = ["hello", "goodbye", "hello"] x= [str(list1.count(i))+'x'+i for i in set(list1)] message = ", ".join(x) print(message)
Bien que ce soit bien comme (effectivement) un one-liner, la complexité du temps ici est quadratique. De plus, si OP veut que la chaîne de résultat soit triée par nombre décroissant ou par emplacement d'occurrence (la spécification n'est pas claire), cela ne le fera pas - l'ordre de l' set est arbitraire.
vous pouvez utiliser des pandas dans cet exemple:
2 x hello 1 x goodbye
production:
import pandas as pd
list1 = ["hello", "goodbye", "hello"]
counts = Counter(list1)
a = pd.Series(counts)
for i in range(2):
print(a[i] , "x" , a.index[i])
Bienvenue à SO! L'ordre est-il important dans votre jeu de sortie? En d'autres termes, l'élément le plus fréquent apparaît-il devant ou est-il classé par index?
Non, ce n'est pas grave!