У мене є список 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)
.