2012-03-05 34 views
10

Tài liệu Python nêu rõ rằng, khi được gọi với nhiều đối số, hàm max() trả về lớn nhất của các đối số.Tối đa hai bộ dữ liệu

>>> a = (1, 1, 1, 9) 
>>> b = (4, 5, 6) 
>>> max(a, b) 
(4, 5, 6) 

gì định nghĩa cách lớn một tuple, trong bối cảnh này, là gì? Bộ tóan a có cả số phần tử cao hơn (bốn so với ba) và giá trị lớn nhất (9) lớn hơn số tối đa có thể tìm thấy trong b (6), vì vậy theo bất kỳ tiêu chí nào tôi đã mong đợi nó sẽ là trả lại. Các tuple được so sánh bằng max() như thế nào?

+1

Nếu bạn muốn các tuple dài nhất, sử dụng 'max (a, b, key = len)'. Đối với bộ tuple có số lớn nhất trong nó, sử dụng 'max (a, b, key = max)' –

Trả lời

12

Tuples giống như tất cả các chuỗi khác được sắp xếp thứ tự từ điển: thứ tự của hai bộ dữ liệu được quyết định bởi vị trí đầu tiên mà các bộ khác nhau. Trích dẫn từ số python reference:

Tuples và danh sách được so sánh theo từ điển bằng cách so sánh các nguyên tố tương ứng với .

hai tuples của bạn khác nhau về vị trí đầu tiên và kể từ 4> 1, ta có

>>> (4, 5, 6) > (1, 1, 1, 9) 
True 
+0

+1 để tham chiếu – MDT

+0

Có phải so sánh giữa các loại được ghi lại ở đâu đó không? Tôi đang tìm một lời giải thích về lý do tại sao "python"> [130, 129] bằng True, hoặc tại sao [1, 2, 3]> 999 cũng trả về True. – plok

+1

Thứ tự của các giá trị của các loại khác nhau là tùy ý, vì vậy người ta không nên dựa vào nó. Xem tài liệu tham khảo tôi đã đưa ra. Một câu nói khác: "Nếu không, các đối tượng của các loại khác nhau luôn so sánh không bình đẳng, và được sắp xếp một cách nhất quán nhưng tùy ý." –

3

Chúng được so sánh một phần tử tại một thời điểm, giống như bất kỳ chuỗi nào khác. Đó là (có lẽ) dễ nhất để hiểu nếu bạn so sánh nó với so sánh chuỗi:

>>> (1, 2, 3) > (1, 2, 4) 
False 
>>> (2, 2, 3) > (1, 2, 4) 
True 
>>> 'abc' > 'abd' 
False 
>>> 'bbc' > 'abd' 
True 
4

Từ trái sang phải nó so sánh từng phần tử của các bộ cho đến khi nó tìm thấy một lớn hơn khác. Tuple này sau đó được trả về. Ví dụ:

>>> a = (2,0,0,0) 
>>> b= (1,1,1,1) 
>>> max(a,b) 
(2, 0, 0, 0) 

>>> b = (2,1,1,1) 
>>> max(a,b) 
(2, 1, 1, 1) 

Sau khi phần tử được tìm thấy trong một bộ lớn hơn các phần tử tương ứng, các giá trị còn lại không ảnh hưởng đến bộ trả về.

+0

Tôi đến cùng một kết luận thông qua thử và sai, Nhưng nó dường như không được ghi lại bất cứ nơi nào tôi nhìn, có bất kỳ ý tưởng mà nó có thể được? – 8bitwide

+0

Không, tôi ngạc nhiên về cách mơ hồ tài liệu cho max() là thực sự. – MDT

0

So sánh sử dụng < nên tương đương với:

def compare(a,b): 
    print "" 
    print "testing %s < %s" %(str(a),str(b)) 
    for ai,bi in zip(a,b): 
     print "comparing elements",ai,bi 
     if ai < bi: 
      return True 
     if bi < ai: 
      return False 
    if len(a)<len(b): 
     return True 
    return False 

test_cases = [tuple([1]),(1,2),(1,1),(1,1,1),(None,None,None),tuple([None]),(99,99)] 

print "running tests" 
for a in test_cases: 
    for b in test_cases: 
     assert(compare(a,b) == (a<b)) 
""" 
>>> 
running tests 

testing (1,) < (1,) 
comparing elements 1 1 

testing (1,) < (1, 2) 
comparing elements 1 1 

testing (1,) < (1, 1) 
comparing elements 1 1 

testing (1,) < (1, 1, 1) 
comparing elements 1 1 

testing (1,) < (None, None, None) 
comparing elements 1 None 

testing (1,) < (None,) 
comparing elements 1 None 

testing (1,) < (99, 99) 
comparing elements 1 99 

testing (1, 2) < (1,) 
comparing elements 1 1 

testing (1, 2) < (1, 2) 
comparing elements 1 1 
comparing elements 2 2 

testing (1, 2) < (1, 1) 
comparing elements 1 1 
comparing elements 2 1 

testing (1, 2) < (1, 1, 1) 
comparing elements 1 1 
comparing elements 2 1 

testing (1, 2) < (None, None, None) 
comparing elements 1 None 

testing (1, 2) < (None,) 
comparing elements 1 None 

testing (1, 2) < (99, 99) 
comparing elements 1 99 

testing (1, 1) < (1,) 
comparing elements 1 1 

testing (1, 1) < (1, 2) 
comparing elements 1 1 
comparing elements 1 2 

testing (1, 1) < (1, 1) 
comparing elements 1 1 
comparing elements 1 1 

testing (1, 1) < (1, 1, 1) 
comparing elements 1 1 
comparing elements 1 1 

testing (1, 1) < (None, None, None) 
comparing elements 1 None 

testing (1, 1) < (None,) 
comparing elements 1 None 

testing (1, 1) < (99, 99) 
comparing elements 1 99 

testing (1, 1, 1) < (1,) 
comparing elements 1 1 

testing (1, 1, 1) < (1, 2) 
comparing elements 1 1 
comparing elements 1 2 

testing (1, 1, 1) < (1, 1) 
comparing elements 1 1 
comparing elements 1 1 

testing (1, 1, 1) < (1, 1, 1) 
comparing elements 1 1 
comparing elements 1 1 
comparing elements 1 1 

testing (1, 1, 1) < (None, None, None) 
comparing elements 1 None 

testing (1, 1, 1) < (None,) 
comparing elements 1 None 

testing (1, 1, 1) < (99, 99) 
comparing elements 1 99 

testing (None, None, None) < (1,) 
comparing elements None 1 

testing (None, None, None) < (1, 2) 
comparing elements None 1 

testing (None, None, None) < (1, 1) 
comparing elements None 1 

testing (None, None, None) < (1, 1, 1) 
comparing elements None 1 

testing (None, None, None) < (None, None, None) 
comparing elements None None 
comparing elements None None 
comparing elements None None 

testing (None, None, None) < (None,) 
comparing elements None None 

testing (None, None, None) < (99, 99) 
comparing elements None 99 

testing (None,) < (1,) 
comparing elements None 1 

testing (None,) < (1, 2) 
comparing elements None 1 

testing (None,) < (1, 1) 
comparing elements None 1 

testing (None,) < (1, 1, 1) 
comparing elements None 1 

testing (None,) < (None, None, None) 
comparing elements None None 

testing (None,) < (None,) 
comparing elements None None 

testing (None,) < (99, 99) 
comparing elements None 99 

testing (99, 99) < (1,) 
comparing elements 99 1 

testing (99, 99) < (1, 2) 
comparing elements 99 1 

testing (99, 99) < (1, 1) 
comparing elements 99 1 

testing (99, 99) < (1, 1, 1) 
comparing elements 99 1 

testing (99, 99) < (None, None, None) 
comparing elements 99 None 

testing (99, 99) < (None,) 
comparing elements 99 None 

testing (99, 99) < (99, 99) 
comparing elements 99 99 
comparing elements 99 99""" 
Các vấn đề liên quan