Подсчет элементов в списке только один раз без дублирования в python - PullRequest
0 голосов
/ 28 июня 2018

Мой ввод должен быть целым числом. Основываясь на целочисленном значении, я должен дать строки в списке .. и мой код:

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 голосов
/ 28 июня 2018

вы должны использовать 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)

выводит количество каждого слова

0 голосов
/ 28 июня 2018

Ты ооооочень близко!

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

Обратите внимание, что, поскольку вы сообщаете счет каждого слова только один раз, вы потеряли сильную связь между каждым счетом и словом, которое оно представляет. И set, и Counter потеряют этот порядок.

0 голосов
/ 28 июня 2018

Вы забыли преобразовать список в набор во втором цикле:

for j in set(words):
    print words.count(j)
0 голосов
/ 28 июня 2018

Использование collections.Counter:

import collections
print collections.Counter(words)

За ваш ввод вы получите:

Counter({'bcdef': 2, 'bcde': 1, 'abcdefg': 1})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...