Tôi có một danh sách, lvà một chức năng f. fkhô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).