Có một số a, b sao cho max (a, b)! = Max (b, a) không? [đóng cửa]


11

Trong python 3.x, có một số a, bnhư vậy max(a, b) != max(b, a)?

abphải là loại python tích hợp và không chứa bất kỳ chuyển đổi nào.

Loại abcó thể là: num, float, bool, list, tuple ...

Thí dụ:

a = 1 # Correct
a = [1, 2] # Correct
a = float('nan') # Wrong

1
câu hỏi của bạn không rõ ràng
seralouk

Tôi không nghĩ có bất kỳ ... maxlà một hàm tích hợp lấy một đối tượng lặp lại làm đầu vào. Vì vậy, a,bcũng giống như b,ado đó max(a,b)phải bằng nhaumax(b,a)
Anwarvic

1
Đây là một câu hỏi hay nhưng bạn nên chỉnh sửa và giải thích thêm
El.Hum

2
Chỉnh sửa của bạn chỉ có ý nghĩa trong bối cảnh bình luận của bạn dưới câu trả lời được bình chọn nhiều nhất. Ở đó và ở đây, bạn không thể tranh luận rằng đó float('nan')không phải là một loại tích hợp. Tôi cho rằng "loại tích hợp" sẽ có nghĩa là bất cứ thứ gì bạn có thể tạo mà không cần phải tạo mới class.
Teepeemm

2
Nếu bạn muốn loại trừ float('nan'), thì tại sao? Để rõ ràng, bạn được phép đặt một câu hỏi trong đó bạn loại trừ một cái gì đó như float('nan')nếu bạn muốn; Đó không phải là vấn đề. Vấn đề chỉ là không ai chắc chắn những gì bạn đang cố gắng hỏi.
Nat

Câu trả lời:


17

Điều này đáp ứng tất cả các tiêu chí:

>>> max(1.0, float("nan"))
1.0

>>> max(float("nan"), 1.0)
nan

Điều này là do bất kỳ so sánh khác hơn !=hoặc isbằng float("nan")luôn luôn trả về false.

Tổng quát hơn, chúng ta có thể có max(a, b) != max(b, a)khi loại (s) a, bkhông cung cấp tổng số đơn hàng. Như Daniel Mesejo chỉ ra, các bộ cũng có tính chất này. Đối với các tập hợp <có nghĩa là 'tập hợp con nghiêm ngặt', nhưng với {1, 2}{3, 4}không phải là tập hợp con nghiêm ngặt của tập hợp khác, vì vậy:

>>> max({1, 2}, {3, 4})
{1, 2}

>>> max({3, 4}, {1, 2})
{3, 4}

Điều này về mặt kỹ thuật không có max(a, b) != max(b, a)bởi vì 1 == True, nhưng vẫn có một sự khác biệt có thể quan sát được:

>>> max(True, 1)
True

>>> max(1, True)
1

1
Ôi ... tại sao vậy ??
Anwarvic

7
@ stackFF4 nếu float("nan")không được tích hợp sẵn, thì nó là gì? Nó chắc chắn được tích hợp sẵn.
Tweetsash

9
@ stackFF4: float('nan')là một cái phao. Nó nói floatngay tại đó, vì vậy tôi không chắc bạn sẽ mong đợi điều gì nữa. Bạn có thể kiểm tra nó typenếu bạn muốn.
user2357112 hỗ trợ Monica

1
@Anwarvic: Thật thú vị, đó không phải là một điều trăn, đó thực sự là cách thức nổi được thực hiện trong phần cứng. NaN so sánh sai với mọi thứ trong hầu hết mọi ngôn ngữ lập trình.
Vịt Mooing

2
@Nat: Nhưng không ai muốn ngoại lệ hầu hết thời gian. Đây maxhành vi là một artifact của định nghĩa nó khác so với C fmax(mà đảm bảo NaN tuyên truyền), thay vào đó là một cái gì đó như a<b ? b : aluôn tạo ra akhi so sánh là sai. NaN là "không có thứ tự" wrt. bất kỳ số nào khác, a < NaNluôn luôn là sai và cũng vậyNaN < b
Peter Cordes

5

Theo tài liệu , sử dụng maxtrên các bộ tạo ra kết quả không xác định:

Theo đó, các tập hợp không phải là đối số thích hợp cho các hàm phụ thuộc vào tổng thứ tự (ví dụ: min (), max () và sort () tạo ra kết quả không xác định được đưa ra một danh sách các bộ làm đầu vào).

Đây là một ví dụ,

a = {1, 2}
b = {2, 3}
print(max(b, a) != max(a, b))

Đầu ra

True

Điều đáng chú ý ở đây là "các kết quả không xác định" có lẽ sẽ an toàn hơn trong Python so với một số ngôn ngữ khác. Không có con quỷ mũi nào có khả năng, và nó có lẽ sẽ không gây ra ngoại lệ. Nó chỉ trả về một giá trị chủ yếu là tùy ý (cho minmax) hoặc đặt hàng (cho sorted).
Blckknght
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.