Finden Sie doppelte Elemente in einer Liste

Ich habe eine liste:

nums = [1, 2, 3, 1, 5, 2, 7, 11] 

Ich versuche, eine Funktion zu machen, die zurückgibt, wie oft jede Zahl in den Listen erscheint. Ausgabe kann wie folgt aussehen:

 1 occurred 2 times 2 occurred 2 times 3 occurred 1 time 5 occurred 1 time ... ... 

Das habe ich bisher versucht:
-Create Wörterbuch für jedes Element in der Liste
-Haben Sie verschachtelte Schleife durch jedes Element und überprüfen Sie es gegen jedes andere Element
-Wenn Elemente übereinstimmen, fügen Sie eine der Wörterbuch-Taste dieses Elements hinzu

Das Problem:
Jedes Mal, wenn es durchschleift, erkennt es die gleichen Elemente. Darum aber so viel von einem gewissen Element gibt es, anstatt von 1 hinzugefügt zu werden, wird es durch die n Macht angehoben

 Enter integers between 1 and 100: 5 2 41 4 5 2 2 4 4 occurs 4 times 2 occurs 9 times 41 occurs 1 times 5 occurs 4 times 

Code:

 def main(): original_nums = input("Enter integers between 1 and 100: ") nums = [i for i in original_nums.split()] my_dict = {} for i in nums: my_dict[i] = 0 for i in nums: for j in nums: if i == j: my_dict[i] += 1 for i in my_dict: print(i,"occurs",my_dict[i],"times") if __name__ == "__main__": main() 

2 Solutions collect form web for “Finden Sie doppelte Elemente in einer Liste”

Counter ist alles was du brauchst

 >>> from collections import Counter >>> Counter([1, 2, 3, 1, 5, 2, 7, 11]) Counter({1: 2, 2: 2, 3: 1, 5: 1, 7: 1, 11: 1}) 

Oder du kannst deinen Code einfach so reparieren

 def main(): original_nums = input("Enter integers between 1 and 100: ") nums = [i for i in original_nums.split()] my_dict = {} for i in nums: my_dict[i] = my_dict.get(i, 0) + 1 # or .setdefault(i, 0) instead of .get(i, 0) # setdefault is generally faster for i in my_dict: print(i, 'occurs', my_dict[i], 'times') if __name__ == '__main__': main() 

Laufzeit:

 Enter integers between 1 and 100: 5 5 5 5 1 2 3 3 3 1 occurs 1 times 2 occurs 1 times 3 occurs 3 times 5 occurs 4 times 

Sie können einfach eine collections.Counter , die im Wesentlichen tut, was Sie versuchen, intern zu tun:

 >>> from collections import Counter >>> >>> nums = [1, 2, 3, 1, 5, 2, 7, 11] >>> >>> counts = Counter(nums) >>> >>> for t in counts.iteritems(): ... print '%d occured %d times' % t ... 1 occured 2 times 2 occured 2 times 3 occured 1 times 5 occured 1 times 7 occured 1 times 11 occured 1 times 
  • Python embeddable zip
  • Keine Umrisse auf Bins von Matplotlib Histogrammen oder Seaborn distplots
  • Wie man alle Emojis aus Text extrahiert?
  • Was macht --enable-optimisierungen bei der kompilierung von python?
  • Tiefe Version von sys.getsizeof
  • Wie ändere ich die Stringdarstellung einer Python-Klasse?
  • Regex, um verschachtelte Muster zu extrahieren
  • Verwenden Sie `for` in` print () `gibt einen Generator auf Python 3.x?
  • Verbinden Sie ein Wort Zeilen in einer Datei
  • Typ Fehler Unwaschbar Typ: set
  • Wie vermeide ich C-Bibliothek mit meinem Python-Paket?
  • Python ist die beste Programmiersprache der Welt.