如何计算列表中的唯一值

Joe*_*qu. 100 python arrays variables loops unique

所以我试图让这个程序要求用户输入并将值存储在数组/列表中.
然后,当输入空行时,它将告诉用户这些值中有多少是唯一的.
我建立这是出于现实生活的原因而不是问题集.

enter: happy
enter: rofl
enter: happy
enter: mpg8
enter: Cpp
enter: Cpp
enter:
There are 4 unique words!
Run Code Online (Sandbox Code Playgroud)

我的代码如下:

# 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:
Run Code Online (Sandbox Code Playgroud)

..那就是我到目前为止所做的一切.
我不确定如何计算列表中唯一的单词数?
如果有人可以发布解决方案,以便我可以从中学习,或者至少告诉我它会如何变得更好,谢谢!

Vid*_*dul 193

另外,使用collections.Counter重构代码:

from collections import Counter

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

Counter(words).keys() # equals to list(set(words))
Counter(words).values() # counts the elements' frequency
Run Code Online (Sandbox Code Playgroud)

输出:

['a', 'c', 'b']
[2, 1, 1]
Run Code Online (Sandbox Code Playgroud)

  • 不是Joel的问题的答案,但*正好*我正在寻找的,谢谢! (34认同)
  • 请注意,如果您想将其表示为像 `count_dict = {'a': 2, 'b': 1, 'c': 1}` 这样的字典,您可以执行 `count_dict = dict(Counter(words).items() )` (8认同)
  • @Peter `.items()` 是不需要的。`字典(计数器(单词))` (4认同)
  • `Counter(words).values()` 很好。我们假设计数是按照单词列表第一次出现的顺序排列的?我的意思是,我假设计数将给出 a、b、c、d 的计数... (2认同)

cod*_*box 184

您可以使用一个来删除重复项,然后使用len函数来计算集合中的元素:

len(set(new_words))
Run Code Online (Sandbox Code Playgroud)


Jam*_*orn 20

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

  • 它提供了更精致的信息。 (4认同)

Lin*_*iel 15

使用一套:

words = ['a', 'b', 'c', 'a']
unique_words = set(words)             # == set(['a', 'b', 'c'])
unique_word_count = len(unique_words) # == 3
Run Code Online (Sandbox Code Playgroud)

有了这个,您的解决方案可以简单到:

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
Run Code Online (Sandbox Code Playgroud)


小智 9

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}
Run Code Online (Sandbox Code Playgroud)

  • 请解释一下这与其他答案有何不同 (3认同)

小智 6

对于 ndarray 有一个名为unique的 numpy 方法:

np.unique(array_name)
Run Code Online (Sandbox Code Playgroud)

例子:

>>> 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])
Run Code Online (Sandbox Code Playgroud)

对于系列,有一个函数调用value_counts()

Series_name.value_counts()
Run Code Online (Sandbox Code Playgroud)


Eva*_*ans 5

如果您想获得唯一值的直方图,请使用 oneliner

import numpy as np    
unique_labels, unique_counts = np.unique(labels_list, return_counts=True)
labels_histogram = dict(zip(unique_labels, unique_counts))
Run Code Online (Sandbox Code Playgroud)