2011-03-13 16 views
104

Tôi đã được đọc Core Python cuốn sách lập trình, và các tác giả cho thấy một ví dụ như:So sánh tuple hoạt động như thế nào trong Python?

(4, 5) < (3, 5) # Equals false 

Vì vậy, tôi đang tự hỏi, làm thế nào/tại sao nó bằng giả? Làm thế nào để python so sánh hai bộ dữ liệu này?

Btw, nó không được giải thích trong cuốn sách.

Trả lời

121

Tuples được so sánh vị trí theo vị trí: mục đầu tiên của bộ tuple đầu tiên được so sánh với mục đầu tiên của bộ dữ liệu thứ hai; nếu chúng không bằng nhau, đây là kết quả của việc so sánh, nếu không thì mục thứ hai được xem xét, sau đó là mục thứ ba và vân vân.

Xem doc: Các loại

Chuỗi cũng hỗ trợ so sánh. Đặc biệt, các bộ và danh sách được so sánh theo từ điển bằng cách so sánh các phần tử tương ứng. Điều này có nghĩa là để so sánh bằng nhau, mọi phần tử phải so sánh bằng nhau và hai chuỗi phải cùng loại và có cùng độ dài.

Cũng this:

Tuples và danh sách được so sánh thứ tự từ điển sử dụng so sánh các yếu tố tương ứng. Điều này có nghĩa rằng để so sánh bằng nhau, mỗi phần tử phải so sánh bằng nhau và hai chuỗi phải cùng loại và có cùng độ dài.

Nếu không bằng nhau, trình tự được sắp xếp giống như các phần tử khác nhau đầu tiên của chúng. Ví dụ, cmp ([1,2, x], [1,2, y]) trả về giống như cmp (x, y). Nếu phần tử tương ứng không tồn tại, chuỗi ngắn hơn được coi là nhỏ hơn (ví dụ: [1,2] < [1,2,3] trả về Đúng).

Note rằng <> không có nghĩa là "nhỏ hơn sau đó" và "lớn rồi" nhưng "là trước" và "là sau": như vậy (0, 1) "là trước" (1, 0).

Lưu ý 2: tuples không được coi là tọa độ trong không gian n-chiều!

Note 3: đề cập đến câu hỏi Python 2 tuple comparison: đừng nghĩ rằng một tuple là "lớn" hơn người khác chỉ khi bất kỳ yếu tố đầu tiên là lớn hơn so với cái tương ứng trong lần thứ hai

+3

là tuple so sánh được thực hiện trong Trên)? – CMCDragonkai

+2

Điều này có thể gây hiểu lầm khi nói về '<' and '>'. Ví dụ, '(0, 1) <(1, 0)' đánh giá thành 'True'. –

+3

@CMCDragonkai - vâng. thử: 'x = tuple ([0 cho _ trong phạm vi (n)])' và làm tương tự cho y. Thiết lập n = 100, 1000, 10.000 và 100.000 và chạy '% timeit x == y' cho giá trị thời gian là 0,5, 4,6, 43,9 và 443 micro giây tương ứng, gần bằng O (n) như bạn có thể thực tế nhận được. –

18

Python documentation giải thích điều đó.

Tuples và danh sách được so sánh thứ tự từ điển sử dụng so sánh phần tử tương ứng. Điều này có nghĩa là để so sánh bằng nhau, mỗi phần tử phải so sánh bằng nhau và hai chuỗi phải cùng loại và có cùng độ dài.