我目前正在尝试编写一个程序来计算输入中单词出现的次数。我目前遇到了以下问题:
以此为例:
list: ['red', 'green', 'blue', 'green']
如果我使用这样的for循环:
for i in range(len(userinput)):
list.count(userinput[i])
它只会返回:1, 2, 1, 2
我如何让它返回:1, 2, 1
,只计算一次其他事件?
答案 0 :(得分:3)
我不确定形式[1,2,1]中的计数是否具有多大意义。理想情况下,您需要一个字典,其中包含每个元素的计数:
l = ['red', 'green', 'blue', 'green']
from collections import Counter
Counter(l)
你得到了
Counter({'blue': 1, 'green': 2, 'red': 1})
如果您希望在没有计数器的情况下执行此操作,请尝试
dict((item, l.count(item)) for item in l)
你得到了
{'blue': 1, 'green': 2, 'red': 1}
答案 1 :(得分:1)
counts = []
seen = set()
for a_string in userinput_list:
if a_string not in seen:
print(a_string,"=",userinput_list.count(a_string))
seen.add(a_string)
我猜...有更好的方法来做到这一点,但这应该有用
答案 2 :(得分:1)
这是最好的方式。
userinput = ['red', 'green', 'blue', 'green']
set = set([])
for input in userinput :
set.add(userinput.count(input))
print set
你得到了
set([1, 2])
另一个例子,
userinput = ['red', 'green', 'blue', 'green', 'green'] #Added green
set = set([])
for input in userinput :
set.add(userinput.count(input))
print set
你得到了
set([1, 3])
试试这个
答案 3 :(得分:0)
您可以使用HashTable,其中键是单词,值是计数器。 每次看到单词增加计数器时,如果是新单词,则将计数器设置为1。
答案 4 :(得分:0)
您可以使用collections.defaultdict
:
>>> from collections import defaultdict
>>>
>>> def element_count(lst):
count = defaultdict(int)
for element in lst:
count[element] += 1
return list(count.values())
>>>
>>> lst = ['red', 'green', 'blue', 'green']
>>> element_count(lst)
[1, 1, 2]
>>>