仅对列表中的元素计数一次,而无需在python中重复

时间:2018-06-28 17:24:54

标签: python python-2.7

我的输入应为整数。基于整数值,我必须在列表中输入字符串。我的代码是:

words = []
i = int(raw_input())
for i in range(0,i):
   j= str(raw_input())
   words.append(j)

unique_word_count = len(set(words))

print unique_word_count
for j in words:
    print words.count(j),

而我的输入是

4
bcdef
abcdefg
bcde
bcdef

输出为

3
2 1 1 2

但是我需要这样的输出:

3
2 1 1

我该怎么办?

4 个答案:

答案 0 :(得分:1)

使用collections.Counter

import collections
print collections.Counter(words)

对于您的输入,您将获得:

Counter({'bcdef': 2, 'bcde': 1, 'abcdefg': 1})

答案 1 :(得分:1)

您太近了!

for j in set(words):
    print words.count(j),

请注意,由于您只报告一次每个单词的计数,因此,您已经失去了每个计数与它所代表的单词之间的紧密联系。 setCounter都将失去该顺序。

答案 2 :(得分:0)

您忘记了在第二个循环中将列表转换为集合:

for j in set(words):
    print words.count(j)

答案 3 :(得分:0)

您应该使用from collections import Counter

words = []
i = int(input())
for index in range(0,i):
   j= input()
   words.append(j)

unique_word_count = Counter(words)
print(unique_word_count)

其输出每个单词的数量