Tôi có một danh sách, l
và một chức năng f
. f
không nghiêm túc tăng hay giảm. Làm thế nào tôi có thể tìm thấy các mục trong danh sách f(item)
nhỏ nhất? Ví dụ: giả sử danh sách là:
l = [1, 2, 3, 4]
và list(f(x)for x in l)
là:
[2, 9, 0, 3]
f(3)
nhỏ hơn f của bất kỳ cái nào khác, vì vậy nó nên in "3". Cách ngắn nhất để làm điều này là gì? Tôi đã thử ban đầu:
min(f(x) for x in l)
Nhưng điều này cho 0
, không 3
. Nếu tôi chụp để dễ đọc chứ không phải ngắn gọn, tôi sẽ làm:
index = 0
smallest = f(l[0])
for i in range(len(l)):
value = f(l[i])
if value < smallest:
smallest = value
index = i
Điều này là tốt, nhưng khủng khiếp cho mã golf. Ngay cả khi nó được đánh golf
i,s=0,f(l[0])
for x in range(len(l)):
v=f(l[x])
if v<s:s,i=v,x
Đây là một giải pháp tồi. Giải pháp ngắn nhất tôi có thể nghĩ đến là:
g=[f(x)for x in l];print(l[g.index(min(g))])
(44 byte) Làm thế nào tôi có thể đánh gôn này xuống hơn nữa?
min(l,key=f)
.