如何在列表中省略重复项?

时间:2017-07-10 04:04:15

标签: python

我目前正在尝试编写一个程序来计算输入中单词出现的次数。我目前遇到了以下问题:

以此为例:

list: ['red', 'green', 'blue', 'green']

如果我使用这样的for循环:

for i in range(len(userinput)):
    list.count(userinput[i])

它只会返回:1, 2, 1, 2

我如何让它返回:1, 2, 1,只计算一次其他事件?

5 个答案:

答案 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]
>>>