2011-01-20 37 views
7

Tôi có một lớp học chứa danh sách các chuỗi. Nói:Cách đảm bảo danh sách chứa các yếu tố độc đáo?

ClassName: 
- list_of_strings 

Tôi cần thực thi danh sách chuỗi này chứa các phần tử duy nhất. Thật không may, tôi không thể thay đổi list_of_strings này thành loại khác, như một tập hợp.

Trong chức năng addToList(str_to_add), tôi muốn đảm bảo tính độc đáo của chuỗi. Làm thế nào tôi có thể làm điều này tốt nhất? Nó sẽ được thực tế để thêm chuỗi được thêm vào danh sách, chuyển đổi sang một tập hợp, sau đó trở lại một danh sách, và sau đó gán lại cho đối tượng?

Dưới đây là phương pháp tôi cần phải cập nhật:

def addToList(self, str_to_add): 
    self.list_of_strings.append(str_to_add) 

Cảm ơn!

+0

* Tại sao * bạn không thể sử dụng bộ? Nó có vẻ là kiểu dữ liệu thích hợp ở đây. –

+0

Danh sách có thể được sắp xếp theo thứ tự được sắp xếp không? Nếu có, thì bạn có thể sử dụng tìm kiếm nhị phân. Nếu không, bạn đang mắc kẹt với một số thuật toán đặt hàng tuyến tính, do đó, chuyển đổi sang tập hợp có thể chỉ là điều đơn giản nhất nếu tốc độ tuyệt đối không phải là một yêu cầu. – chrisaycock

+0

Có lẽ anh ta muốn giữ gìn trật tự, hoặc đã có mã tại chỗ mà hy vọng một danh sách theo thứ tự chứ không phải là một bộ. Một bộ đơn đặt hàng hoặc danh sách duy nhất là một kiểu dữ liệu hợp lý. – bnaul

Trả lời

21
def addToList(self, str_to_add): 
    if str_to_add not in self.list_of_strings: 
     self.list_of_strings.append(str_to_add) 
+0

Ahh ... bạn nói đúng và điều này là đúng cho vấn đề tôi mô tả. Một cách tiết kiệm, tôi chỉ nhận ra rằng tôi đã mô tả vấn đề của mình sai và vấn đề tôi gặp phải hoàn toàn khác. – Cuga

1

Bạn thực sự có thể làm các hoạt động danh sách-to-set-to-danh sách bạn mô tả, nhưng bạn cũng có thể sử dụng toán tử in để kiểm tra xem phần tử đã nằm trong danh sách trước khi phụ nó.

4

Kiểm tra sự hiện diện của chuỗi trong danh sách với in hoặc sử dụng song song set mà bạn có thể kiểm tra và thêm vào.

+0

Bộ song song là một ý tưởng thú vị. – kindall

+0

Điều này có lẽ hiệu quả hơn về mặt tra cứu, đặc biệt nếu danh sách lớn. – ffledgling

0

Một cách có thể để thực hiện việc này là tạo một bộ băm và lặp qua danh sách, thêm các phần tử vào tập hợp; một lần lặp thứ hai có thể được sử dụng để loại bỏ bất kỳ bản sao nào.

0

Có lẽ chúng ta có thể làm như thế này:

def addToList (tự, str_to_add):

try: 
    self.list_of_strings.index(str_to_add) 
except: 
    self.list_of_strings.append(str_to_add) 

Vâng, tôi không biết cho dù đó là cơ chế tương tự với if/else được nêu ra.

Các vấn đề liên quan