2013-02-02 27 views

Trả lời

55

Bạn có thể làm

if item not in mylist: 
    mylist.append(item) 

Nhưng bạn thực sự cần sử dụng một bộ, như thế này:

myset = set() 
myset.add(item) 

EDIT: Nếu trật tự là rất quan trọng nhưng danh sách của bạn là rất lớn, bạn nên có lẽ sử dụng cả danh sách một bộ, như sau:

mylist = [] 
myset = set() 
for item in ...: 
    if item not in myset: 
     mylist.append(item) 
     myset.add(item) 

Bằng cách này, bạn sẽ nhanh chóng tìm kiếm sự tồn tại của phần tử, nhưng bạn vẫn giữ được trật tự của mình. Nếu bạn sử dụng giải pháp ngây thơ, bạn sẽ nhận được hiệu suất O (n) để tra cứu và có thể xấu nếu danh sách của bạn lớn

Hoặc, như @larsman đã chỉ ra, bạn có thể sử dụng OrderedDict để có cùng tác dụng:

from collections import OrderedDict 

mydict = OrderedDict() 
for item in ...: 
    mydict[item] = True 
+1

Không có phương thức như 'append' cho' set'. Bạn chắc chắn có nghĩa là 'add'. –

+1

Một lần nữa, bộ là * orderless *, vì vậy nó không tương đương. –

+0

cảm ơn, sửa chữa –

7

Nếu bạn muốn có những yếu tố duy nhất trong danh sách của bạn, thì tại sao không sử dụng một bộ, nếu tất nhiên, trật tự không quan trọng dành cho bạn: -

>>> s = set() 
>>> s.add(2) 
>>> s.add(4) 
>>> s.add(5) 
>>> s.add(2) 
>>> s 
39: set([2, 4, 5]) 

Nếu trật tự là một vấn đề đáng quan tâm, sau đó bạn có thể sử dụng: -

>>> def addUnique(l, num): 
...  if num not in l: 
...   l.append(num) 
...  
...  return l 

bạn cũng có thể tìm thấy một công thức OrderedSet, được đề cập đến trong Python Documentation

+0

Lưu ý rằng điều này sẽ không hoạt động nếu thứ tự quan trọng. –

+0

@Lattyware .. Tất nhiên. Đã thêm điểm đó. –

+0

vì vậy nếu tôi muốn các số được tăng dần, tôi phải làm điều đó? bạn có thể giải thích thêm một phần nữa không? (vâng tôi phải có một bộ đặt hàng) – PhoonOne

1

bạn có thể sử dụng một đối tượng thiết lập để thay thế. Chỉ cần add số cho bộ này. Họ vốn không sao chép.

2

Nếu bạn muốn số của bạn theo thứ tự tăng dần, bạn có thể thêm chúng vào bộ và sau đó sắp xếp tập hợp thành danh sách tăng dần.

s = set() 
if number1 not in s: 
    s.add(number1) 
if number2 not in s: 
    s.add(number2) 
... 
s = sorted(s) #Now a list in ascending order 
Các vấn đề liên quan