J'essaie donc de créer ce programme qui demandera à l'utilisateur de saisir et de stocker les valeurs dans un tableau/une liste.
Lorsqu'une ligne vide est entrée, elle indique à l'utilisateur combien de ces valeurs sont uniques.
Je construis cela pour des raisons réelles et non comme un ensemble de problèmes.
enter: happy
enter: rofl
enter: happy
enter: mpg8
enter: Cpp
enter: Cpp
enter:
There are 4 unique words!
Mon code est le suivant:
# 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:
..et c'est à peu près tout ce que j'ai eu jusqu'à présent.
Je ne suis pas sûr de savoir comment compter le nombre unique de mots dans une liste?
Si quelqu'un peut publier la solution pour que je puisse en tirer des leçons, ou au moins me montrer en quoi cela serait formidable, merci!
De plus, utilisez collections.Counter pour refactoriser votre code:
from collections import Counter
words = ['a', 'b', 'c', 'a']
Counter(words).keys() # equals to list(set(words))
Counter(words).values() # counts the elements' frequency
Sortie:
['a', 'c', 'b']
[2, 1, 1]
Utilisez un set :
words = ['a', 'b', 'c', 'a']
unique_words = set(words) # == set(['a', 'b', 'c'])
unique_Word_count = len(unique_words) # == 3
Armé de cela, votre solution pourrait être aussi simple que:
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)
Pour ndarray, il existe une méthode numpy appelée nique :
np.unique(array_name)
Exemples:
>>> 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])
Pour une série, il existe un appel de fonction value_counts () :
Series_name.value_counts()
ipta = raw_input("Word: ") ## asks for input
words = [] ## creates list
unique_words = set(words)
Bien qu'un ensemble soit le moyen le plus simple, vous pouvez également utiliser un dict et utiliser some_dict.has(key)
pour renseigner un dictionnaire avec uniquement des clés et des valeurs uniques.
En supposant que vous ayez déjà rempli words[]
avec les entrées de l'utilisateur, créez un dict mappant les mots uniques de la liste sur un nombre:
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
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}
Je voudrais utiliser un jeu moi-même, mais voici encore un autre moyen:
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!"
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!"
Autre méthode utilisant des 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"])
Vous pouvez ensuite exporter les résultats dans le format de votre choix
Ce qui suit devrait fonctionner. La fonction lambda filtre les mots dupliqués.
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'