Python: как разрешить дублирование в наборе? - PullRequest
5 голосов
/ 26 февраля 2012

Я столкнулся с проблемой, связанной с набором в Python 2.7.

Вот соответствующий пример кода:

letters = set(str(raw_input("Type letters: ")))

Как видите, смысл в том, чтобы написать несколько букв для назначенияна «письма» для последующего использования.Но если я наберу «aaabbcdd», вывод «letters» вернет

set(['a', 'c', 'b', 'd'])

Мой вопрос заключается в том, как написать код, чтобы на выходе были разрешены дубликаты, подобные этому:

set(['a','a','a','b','b','c','d','d'])

Ответы [ 2 ]

11 голосов
/ 26 февраля 2012

set не хранит дубликаты, поэтому он называется set .Вы должны использовать обычный str или list и сортировать его при необходимости.

>>> sorted(raw_input("Type letters: "))
Type letters: foobar
['a', 'b', 'f', 'o', 'o', 'r']

Альтернативой (но для вашего примера избыточно) является контейнер с несколькими наборами collections.Counter,доступно из Python 2.7.

>>> from collections import Counter
>>> c = Counter(raw_input("Type letters: "))
>>> c
Counter({'o': 2, 'a': 1, 'r': 1, 'b': 1, 'f': 1})
>>> sorted(c.elements())
['a', 'b', 'f', 'o', 'o', 'r']
2 голосов
/ 26 февраля 2012

Набор не допускает дублирование по определению. Используйте простой список.

В вашем случае:

letters = list(str(raw_input("Type letters: ")))
print sorted(letters)
...