2011-09-24 29 views
6
a = [1, 2, 3, 4] 
b = [2, 4, 3, 1] 
c = [2, 3] 

Khi so sánh a đến b, nên trả lại True: tất cả các mục trong a được thể hiện trong b, và tất cả các mục trong b được thể hiện trong a.Làm cách nào để có thể so sánh hai danh sách trong python và trả về thứ hai cần phải có cùng giá trị bất kể thứ tự?

Khi so sánh a đến c, phải trả lại False: có các mục trong a không tồn tại trên c.

pythonic cách nào để làm điều đó?

+2

Có các mục trùng lặp trong danh sách của bạn không? – Howard

+0

Không có bản sao nào. –

+1

Nếu đơn đặt hàng không quan trọng, bạn nên sử dụng bộ thay vì danh sách. – delnan

Trả lời

12

Sắp xếp, sau đó so sánh.

sorted(a) == sorted(b) 
5

Sử dụng bộ hoặc frozensets.

set_a = {1, 2, 3, 4} #python 2.7 or higher set literal, use the set(iter) syntax for older versions 
set_b = {2, 4, 4, 1} 

set_a == set_b 

set_a - set_b == set_b - set_a 

Ưu điểm lớn nhất của việc sử dụng bộ trên bất kỳ phương pháp danh sách là nó rất dễ đọc, bạn chưa bị biến đổi iterable ban đầu của bạn, nó có thể thực hiện tốt ngay cả trong trường hợp một là rất lớn và b là nhỏ (kiểm tra xem a và b có cùng độ dài đầu tiên là một tối ưu hóa tốt nếu bạn mong đợi trường hợp này thường xuyên, mặc dù), và sử dụng đúng cấu trúc dữ liệu cho công việc là pythonic.

2

Sử dụng set s:

In [4]: set(a) == set(b) 
Out[4]: True 

In [5]: set(a) == set(c) 
Out[5]: False 
2

Biến họ thành những bộ:

>>> set([1,2,3,4]) == set([2,4,3,1]) 
True 

>>> set([2, 3]) == set([1,2,3,4]) 
False 

Nếu danh sách của bạn có chứa mục trùng lặp, bạn sẽ phải so sánh độ dài của họ quá. Đặt các bản sao thu gọn.

+2

Kiểm tra độ dài không đủ: '[1,1,2,3]! = [1,2,3,3]' – Howard

+2

@Howard: Nhưng tiêu chí duy nhất là: tất cả các mục trong 'a' được trình bày trong' b ', và tất cả các mục trong' b' được trình bày trong 'a'. Theo các tiêu chí đó, '[1,1,2,3] == [1,2,3,3]'. – Johnsyweb

+0

Bằng cách mô tả nghiêm ngặt vấn đề của mình, chiều dài là không cần thiết, người hỏi đã mô tả một bài kiểm tra nơi tất cả các mục xuất hiện trong b. – marr75

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