¿Cómo cuento valores únicos dentro de una lista?

Así que estoy tratando de hacer este progtwig que le pida al usuario una entrada y almacene los valores en una matriz / lista.
Luego, cuando se ingresa una línea en blanco, le dirá al usuario cuántos de esos valores son únicos.
Estoy construyendo esto por razones de la vida real y no como un conjunto de problemas.

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

Mi código es el siguiente:

 # 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: 

..y eso es todo lo que he conseguido hasta ahora.
No estoy seguro de cómo contar el número único de palabras en una lista?
Si alguien puede publicar la solución para que pueda aprender de ella, o al menos mostrarme cómo sería genial, ¡gracias!

Puede usar un conjunto para eliminar duplicados y luego la función len para contar los elementos del conjunto:

 len(set(new_words)) 

Además, usa colecciones. Contacta para refactorizar tu código:

 from collections import Counter words = ['a', 'b', 'c', 'a'] Counter(words).keys() # equals to list(set(words)) Counter(words).values() # counts the elements' frequency 

Salida:

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

Utilice un conjunto :

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

Armado con esto, su solución podría ser tan simple como:

 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)

Para ndarray existe un método numpy llamado unique :

 np.unique(array_name) 

Ejemplos:

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

Para una serie hay una función llamada value_counts () :

 Series_name.value_counts() 
 ipta = raw_input("Word: ") ## asks for input words = [] ## creates list unique_words = set(words) 

Aunque un conjunto es la forma más fácil, también puede usar un dict y some_dict.has(key) para rellenar un diccionario con solo claves y valores únicos.

Suponiendo que ya ha completado las words[] con entrada del usuario, cree un dict que asigne las palabras únicas en la lista a un número:

 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 

Lo siguiente debería funcionar. La función lambda filtra las palabras duplicadas.

 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' 

Yo usaría un set, pero aquí hay otra manera:

 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!"