it-swarm.com.de

Wie zähle ich eindeutige Werte in einer Liste?

Daher versuche ich, dieses Programm zu erstellen, das den Benutzer zur Eingabe auffordert und die Werte in einem Array/einer Liste speichert.
Wenn eine leere Zeile eingegeben wird, wird dem Benutzer mitgeteilt, wie viele dieser Werte eindeutig sind.
Ich baue dies aus realen Gründen und nicht als Problem.

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

Mein Code lautet 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 ungefähr alles, was ich bisher bekommen habe.
Ich bin 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 großartig sie wäre, danke!

87
Joel Aqu.

Verwenden Sie außerdem collections.Counter , 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]
178
Vidul

Sie können ein set verwenden, um Duplikate zu entfernen, und dann die len -Funktion, um die Elemente in der Menge zu zählen:

len(set(new_words))
168
codebox

Benutze ein set :

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

Ausgerüstet damit 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

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

13
James Hirschorn

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

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()
2
user78692
ipta = raw_input("Word: ") ## asks for input
words = [] ## creates list
unique_words = set(words)
1
user1590499

Obwohl ein Satz der einfachste Weg ist, können Sie auch ein Diktat verwenden und some_dict.has(key) verwenden, um ein Wörterbuch nur mit eindeutigen Schlüsseln und Werten zu füllen.

Angenommen, Sie haben bereits words[] Erstellen Sie nach Eingabe des Benutzers ein Diktat, das die eindeutigen Wörter in der Liste einer Zahl zuordnet:

Word_map = {}
i = 1
for j in range(len(words)):
    if not Word_map.has_key(words[j]):
        Word_map[words[j]] = i
        i += 1                                                             
num_unique_words = len(new_map) # or num_unique_words = i, however you prefer
1
JMB
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}
0
MadJayhawk

Ich würde selbst ein Set verwenden, aber hier ist noch ein anderer Weg:

uniquewords = []
while True:
    ipta = raw_input("Word: ")
    if ipta == "":
        break
    if not ipta in uniquewords:
        uniquewords.append(ipta)
print "There are", len(uniquewords), "unique words!"
0
Nicola Musatti
ipta = raw_input("Word: ") ## asks for input
words = [] ## creates list

while ipta: ## while loop to ask for input and append in list
  words.append(ipta)
  ipta = raw_input("Word: ")
  words.append(ipta)
#Create a set, sets do not have repeats
unique_words = set(words)

print "There are " +  str(len(unique_words)) + " unique words!"
0
Curious

Andere Methode mit Pandas

import pandas as pd

LIST = ["a","a","c","a","a","v","d"]
counts,values = pd.Series(LIST).value_counts().values, pd.Series(LIST).value_counts().index
df_results = pd.DataFrame(list(Zip(values,counts)),columns=["value","count"])

Sie können die Ergebnisse dann in ein beliebiges Format exportieren

0
snat2100

Folgendes sollte funktionieren. Die Lambda-Funktion filtert die doppelten Wörter heraus.

inputs=[]
input = raw_input("Word: ").strip()
while input:
    inputs.append(input)
    input = raw_input("Word: ").strip()
uniques=reduce(lambda x,y: ((y in x) and x) or x+[y], inputs, [])
print 'There are', len(uniques), 'unique words'
0
John Wang