0
votes

Comment imprimer la quantité d'éléments identiques dans une liste en Python?

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.


2 commentaires

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!


6 Réponses :


0
votes

Vous pouvez utiliser une collection Counter d'ailleurs: https://docs.python.org/3/library/collections.html#collections.Counter


0 commentaires

2
votes

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 .


1 commentaires

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 .



0
votes
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)

0 commentaires

0
votes

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)


0 commentaires

0
votes

@ 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)


1 commentaires

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.



0
votes

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])


0 commentaires