2012-02-26 34 views
5

Tôi gặp sự cố liên quan đến thiết lập trong Python 2.7.Python: Cách cho phép trùng lặp trong một tập hợp?

Dưới đây là khối mã ví dụ thích hợp:

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

Như bạn có thể thấy, điểm mấu chốt là phải viết một số chữ cái để gán cho "chữ" để sử dụng sau. Nhưng nếu tôi gõ "aaabbcdd", đầu ra của "chữ" trả

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

Câu hỏi của tôi là làm thế nào để viết mã, do đó sản lượng sẽ cho phép trùng lặp như thế này:

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

?

+7

Một tập hợp là một cấu trúc dữ liệu mà chỉ bao giờ chứa các yếu tố độc đáo. Nếu bạn muốn bản sao, hãy sử dụng cấu trúc dữ liệu khác (không phải tập hợp). –

+0

ví dụ: 'letters = list (raw_input (" Loại chữ cái: "))'? –

+0

-1: Câu hỏi dường như bỏ qua các định nghĩa toán học phổ biến cũng như ngôn ngữ Python. –

Trả lời

11

set không lưu trữ các bản sao, đó là lý do tại sao nó được gọi là set. Bạn nên sử dụng thông thường str hoặc list và sắp xếp nó nếu cần.

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

Một thay thế (nhưng quá mức cho ví dụ của bạn) là vùng chứa nhiều bộ collections.Counter, có sẵn từ 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'] 
+0

có, hãy thử danh sách() thay vì đặt() – jisaacstone

+0

Ồ. Tôi không biết. Tôi vẫn còn mới với điều này. Cảm ơn bạn! – Alex

2

Tập hợp không cho phép trùng lặp theo định nghĩa. Sử dụng danh sách đơn giản.

Trong trường hợp của bạn:

letters = list(str(raw_input("Type letters: "))) 
print sorted(letters) 
Các vấn đề liên quan