2012-02-26 13 views
5

Wpadłem na problem związany z ustawieniem w Pythonie 2.7.Python: Jak zezwolić na duplikaty w zestawie?

Oto odpowiedni blok przykładowy kod:

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

Jak widać, chodzi o to, aby napisać kilka liter, aby przypisać do „litery” do późniejszego wykorzystania. Ale jeśli wpiszesz „aaabbcdd”, wyjście „litery” zwraca

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

Moje pytanie brzmi, jak napisać kod, tak że wyjście pozwoli duplikatów tak:

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

?

+7

Zestaw jest strukturą danych, która tylko kiedykolwiek zawiera unikalne elementy. Jeśli chcesz duplikaty, użyj innej struktury danych (nie zestawu). –

+0

na przykład 'letters = list (raw_input (" Type letters: "))'? –

+0

-1: Wydaje się, że pytanie to nie uwzględnia powszechnych definicji matematycznych, a także języka Python. –

Odpowiedz

11

set nie przechowuje duplikatów, dlatego nazywa się set. Powinieneś użyć zwykłego str lub list i posortować go, jeśli to konieczne.

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

Alternatywną (ale przesadą dla przykładu) jest pojemnik multiset collections.Counter, dostępny z Pythonem 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'] 
+0

yes, spróbuj list() zamiast zestawu() – jisaacstone

+0

Oh. Nie wiedziałem. Wciąż jestem nowy w tym. Dziękuję Ci! – Alex

2

Zestaw nie zezwala na duplikaty z definicji. Użyj prostej listy.

W twoim przypadku:

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