У меня есть список l
и функция f
. f
не строго увеличивается или уменьшается. Как я могу найти элемент в списке, который f(item)
является самым маленьким? Например, скажем, список:
l = [1, 2, 3, 4]
и list(f(x)for x in l)
это:
[2, 9, 0, 3]
f(3)
меньше, чем f любого другого, поэтому он должен вывести «3». Какой самый короткий способ сделать это? Я изначально пробовал:
min(f(x) for x in l)
Но это дает 0
, а не 3
. Если бы я стрелял для удобства чтения, а не для краткости, я бы сделал:
index = 0
smallest = f(l[0])
for i in range(len(l)):
value = f(l[i])
if value < smallest:
smallest = value
index = i
Это хорошо, но ужасно для код-гольфа. Даже если бы это было в гольф
i,s=0,f(l[0])
for x in range(len(l)):
v=f(l[x])
if v<s:s,i=v,x
Это плохое решение. Самое короткое решение, которое я могу придумать:
g=[f(x)for x in l];print(l[g.index(min(g))])
(44 байта) Как я могу играть в гольф дальше?
min(l,key=f)
.