Wie zähle ich das Auftreten eindeutiger Werte in einer Liste?

Lesezeit: 4 Minuten

Benutzer-Avatar
Joel Aqu.

Also versuche ich, dieses Programm zu erstellen, das den Benutzer um Eingaben bittet und die Werte in einem Array / einer Liste speichert.
Wenn dann eine Leerzeile eingegeben wird, wird dem Benutzer mitgeteilt, wie viele dieser Werte eindeutig sind.
Ich baue dies aus Gründen des wirklichen Lebens und nicht als Problemsatz.

enter: happy
enter: rofl
enter: happy
enter: mpg8
enter: Cpp
enter: Cpp
enter:
There are 4 unique words!

Mein Code ist wie folgt:

# ask for input
ipta = raw_input("Word: ")

# create list 
uniquewords = [] 
counter = 0
uniquewords.append(ipta)

a = 0   # loop thingy
# while loop to ask for input and append in list
while ipta: 
  ipta = raw_input("Word: ")
  new_words.append(input1)
  counter = counter + 1

for p in uniquewords:

..und das ist alles, was ich bisher bekommen habe.
Ich bin mir nicht sicher, wie ich die eindeutige Anzahl von Wörtern in einer Liste zählen soll?
Wenn jemand die Lösung posten kann, damit ich daraus lernen kann, oder mir zumindest zeigen kann, wie es großartig wäre, danke!

Benutzer-Avatar
Vidul

Außerdem verwenden Sammlungen.Zähler Um Ihren Code umzugestalten:

from collections import Counter

words = ['a', 'b', 'c', 'a']

Counter(words).keys() # equals to list(set(words))
Counter(words).values() # counts the elements' frequency

Ausgabe:

['a', 'c', 'b']
[2, 1, 1]

  • Keine Antwort auf Joels Frage, aber exakt was ich gesucht habe, danke!

    – Huw Walters

    5. September 2015 um 7:29 Uhr


  • Perfekt. Und ein Volltreffer. Danke @Vidul

    – Parag Tyagi

    4. Januar 2016 um 5:58 Uhr

  • Counter(words).values() ist schön. Wir gehen davon aus, dass die Zählung in der Reihenfolge des ersten Auftretens der Wortliste erfolgt? Ich meine, ich nehme an, die Zählung gibt uns die Zählung von a, dann b, dann c, dann d…

    – Monika Heddneck

    19. August 2017 um 1:12 Uhr

  • Beachten Sie, ob Sie dies als Diktat darstellen möchten count_dict = {'a': 2, 'b': 1, 'c': 1} du kannst tun count_dict = dict(Counter(words).items())

    – Petrus

    4. August 2020 um 19:32 Uhr


  • @Peter .items() wird nicht benötigt. dict(Counter(words))

    – wjandrea

    23. September 2020 um 15:32 Uhr

Benutzer-Avatar
Codebox

Sie können eine verwenden einstellen um Duplikate zu entfernen, und dann die len Funktion zum Zählen der Elemente in der Menge:

len(set(new_words))

Benutzer-Avatar
Jakob Hirschhorn

values, counts = np.unique(words, return_counts=True)

Mehr Details

import numpy as np

words = ['b', 'a', 'a', 'c', 'c', 'c']
values, counts = np.unique(words, return_counts=True)

Die Funktion numpy.eindeutig kehrt zurück sortiert eindeutige Elemente der Eingabeliste zusammen mit ihrer Anzahl:

['a', 'b', 'c']
[2, 1, 3]

  • Vier Jahre nach stackoverflow.com/a/12282286/2932052 – was macht diese Lösung besser?

    – Wolf

    14. Januar 2021 um 13:38 Uhr

  • Es gibt verfeinerte Informationen.

    – James Hirschhorn

    14. Januar 2021 um 13:55 Uhr

  • Es ist immer schön, etwas zusätzlichen Aufwand in die Antwort zu stecken, indem Sie zumindest einen Link zur bereitstellen Dokumentation der vorgeschlagenen Funktion.

    – Jeyekomon

    3. September 2021 um 13:00 Uhr

  • @Jeyekomon Ja, eine nette Ergänzung. Sie können die Antwort bearbeiten, wenn Sie möchten.

    – James Hirschhorn

    3. September 2021 um 13:09 Uhr

Benutzer-Avatar
Linus Thiel

Verwenden ein einstellen:

words = ['a', 'b', 'c', 'a']
unique_words = set(words)             # == set(['a', 'b', 'c'])
unique_word_count = len(unique_words) # == 3

Damit bewaffnet, könnte Ihre Lösung so einfach sein wie:

words = []
ipta = raw_input("Word: ")

while ipta:
  words.append(ipta)
  ipta = raw_input("Word: ")

unique_word_count = len(set(words))

print "There are %d unique words!" % unique_word_count

Benutzer-Avatar
MadJayhawk

aa="XXYYYSBAA"
bb=dict(zip(list(aa),[list(aa).count(i) for i in list(aa)]))
print(bb)
# output:
# {'X': 2, 'Y': 3, 'S': 1, 'B': 1, 'A': 2}

  • Bitte erläutern Sie, wie sich dies von den anderen Antworten unterscheidet

    – Akaisteph7

    14. August 2019 um 23:36 Uhr

  • Das ist wie ein Counter aber wirklich ineffizient, weil die meisten Zählungen weggeworfen werden, und list.count() ist sowieso O(n). Sie müssen nicht einmal konvertieren aa überhaupt aufzulisten. Siehe stattdessen Viduls Antwort.

    – wjandrea

    23. September 2020 um 15:38 Uhr


Benutzer-Avatar
tatlar

Für ndarray gibt es eine numpy-Methode namens einzigartig:

np.unique(array_name)

Beispiele:

>>> np.unique([1, 1, 2, 2, 3, 3])
array([1, 2, 3])
>>> a = np.array([[1, 1], [2, 3]])
>>> np.unique(a)
array([1, 2, 3])

Für eine Serie gibt es einen Funktionsaufruf value_counts():

Series_name.value_counts()

  • Bitte erläutern Sie, wie sich dies von den anderen Antworten unterscheidet

    – Akaisteph7

    14. August 2019 um 23:36 Uhr

  • Das ist wie ein Counter aber wirklich ineffizient, weil die meisten Zählungen weggeworfen werden, und list.count() ist sowieso O(n). Sie müssen nicht einmal konvertieren aa überhaupt aufzulisten. Siehe stattdessen Viduls Antwort.

    – wjandrea

    23. September 2020 um 15:38 Uhr


Benutzer-Avatar
Evalds Urtans

Wenn Sie ein Histogramm mit eindeutigen Werten haben möchten, finden Sie hier einen Einzeiler

import numpy as np    
unique_labels, unique_counts = np.unique(labels_list, return_counts=True)
labels_histogram = dict(zip(unique_labels, unique_counts))

1019920cookie-checkWie zähle ich das Auftreten eindeutiger Werte in einer Liste?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy