2009-01-11 3 views
9

Ý tôi là, Tôi đang tìm mã thực sự ngắn trả về giá trị thấp hơn. ví dụ:Mã Python ngắn để nói "Chọn giá trị thấp hơn"?

a=[1,2,3,4,5,6,7,8,9,10] 
b=[1,2,3,4,5,6,7,8] 
len(a) = 10 
len(b) = 8 
if (fill-this-in): 
    print(lesser-value) 

Và tôi quên thêm rằng nếu b là thấp hơn so với một, tôi muốn quay trở lại b - không len (b) - biến b.

Trả lời

3

min() nên thực hiện những gì bạn cần

print(min(a,b)) 
-3

Tôi không biết Python nhưng đối với một cái gì đó như thế này tôi muốn sử dụng một nhà điều hành ternary.

print(length(a) < length(b) ? length(a) : length(b)) 

Một điều cần lưu ý về vấn đề này rằng nếu họ đều bình đẳng nó sẽ in thời gian (b)

+2

Tôi không downvote bạn, nhưng, nếu bạn thấy mình trả lời câu hỏi trăn gắn thẻ bắt đầu bằng cụm từ bất hủ "I don' t biết Python nhưng ... ", bạn có thể chỉ muốn suy nghĩ về việc không trả lời :-). – paxdiablo

0

là sau những gì bạn muốn?

if len(a) < len(b): 
    print a 
else: 
    print b 

Ngoài ra, nếu bạn muốn sử dụng các nhà điều hành ternary như @ Andrew G. Johnson:

print a if len(a) < len(b) else b 

PS. Hãy nhớ rằng Python không sử dụng niềng răng cho các khối của nó, và toán tử bậc ba của nó khác với các ngôn ngữ giống như C.

25

Bạn không rõ ràng về những gì bạn muốn, vì vậy một số lựa chọn thay thế. Căn cứ vào hai danh sách sau đây:

a = [1,2,3,4,5,6,7,8,9,10] 
b = [1,2,3,4,5,6,7,8] 

Để in danh sách ngắn nhất, bạn chỉ có thể làm ..

>>> print(min(a, b)) 
[1, 2, 3, 4, 5, 6, 7, 8] 

Để có được độ dài ngắn nhất là một số, bạn có thể min các len() của mỗi danh sách hoặc làm len(min()) (cả hai đều giống hệt nhau, hãy chọn bao giờ bạn thấy dễ đọc nhất) ..

>>> print(min(len(a), len(b))) 
# or.. 
>>> print(len(min(a, b))) 
8 

Để in giá trị thấp nhất trong danh sách, bạn có thể su pply danh sách như một đối số duy nhất để min()

>>> a.extend(b) # Appends b to a 
>>> print a 
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8] 
>>> print(min(a)) 
1 

Cuối cùng, một khả năng khác, danh sách có giá trị thấp nhất trong tổng số:

>>> max(sum(a), sum(b)) 
55 

Để in danh sách thực tế với mức cao nhất sum(), bạn có thể hoặc sử dụng toán tử ternary, như ..

>>> print a if sum(a) > sum(b) else b 
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

.. mặc dù tôi không bao giờ thực sự thích (hoặc sử dụng), thay vào đó sử dụng lâu hơn một chút, nếu có các câu lệnh..

>>> if sum(a) > sum(b): 
...  print a 
... else: 
...  print b 
... 
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
+0

Upvoting 'vì nó cung cấp cho mọi khả năng ... – paxdiablo

+0

+1 cho tính toàn diện :) althouth câu hỏi thực sự cần được sửa –

5

Nếu độ dài của danh sách là những gì làm cho nó thấp hơn (không có giá trị của nó), sau đó bạn thực sự muốn:

min(a, b, key=len) 

mà chỉ là tình cờ tương đương với

min(a, b) 

trong ví dụ đã cho.

1

đứng đầu, min(a, b, key=len) chỉ hoạt động ở trăn 2.5 trở lên mà tôi nghĩ.

(nó không làm việc trên macbook của tôi với python 2.4, nhưng máy chủ Linux của tôi với 2,5 là tốt)

0

Có vẻ như hiện nay câu trả lời này có thể hết hiệu lực. Tôi chỉ có câu hỏi tương tự và tìm thấy câu trả lời này, nhưng không nhận được kết quả mà tôi mong đợi. Hóa ra Min không tự động trả lại ngắn hơn của hai danh sách (trong 2.7). Để có được điều đó, bạn phải sử dụng đối số 'khóa' (được giới thiệu trong 2.5) (nhấn mạnh thêm):

min (iterable [, key]) min (arg1, arg2, * args [, key]) nhỏ nhất mục trong một iterable hoặc nhỏ nhất của hai hoặc nhiều đối số.

Nếu một đối số vị trí được cung cấp, có thể lặp lại phải là không thể trống (chẳng hạn như chuỗi, tuple hoặc danh sách không trống). Mục nhỏ nhất trong lặp lại được trả lại. Nếu hai hoặc nhiều đối số vị trí được cung cấp, thì đối số vị trí nhỏ nhất được trả về.

Đối số khóa tùy chọn chỉ định hàm đặt hàng một đối số như được sử dụng cho list.sort(). Đối số chính, nếu được cung cấp, phải là trong biểu mẫu từ khóa (ví dụ: min (a, b, c, key = func)).

Thay đổi trong phiên bản 2.5: Thêm hỗ trợ cho lập luận quan trọng bắt buộc

Vì vậy, trong ví dụ này, mặc dù nó có vẻ làm việc (và vẫn sẽ ở 2.7), nó chỉ làm vì danh sách các số nguyên là tương tự. Tuy nhiên nếu những là hai danh sách không theo lệnh khác nhau sau đó:

min(a,b) 

sẽ quay trở lại danh sách với số nguyên đầu tiên thấp nhất.

Để chắc chắn để có được ngắn hơn hai danh sách, sử dụng:

min(a,b, key=len) 
+0

Chết tiệt, bỏ lỡ @coady đã trả lời gọn gàng hơn về điều này. – deepstructure