Bir listem l
ve bir fonksiyonum var f
. f
kesinlikle artmıyor veya azalmıyor. Listedeki f(item)
en küçük öğeyi nasıl bulabilirim ? Örneğin, listenin şöyle olduğunu varsayalım:
l = [1, 2, 3, 4]
ve list(f(x)for x in l)
:
[2, 9, 0, 3]
f(3)
diğerlerinden f'den daha küçük olduğundan, "3" yazmalıdır. Bunu yapmanın en kısa yolu nedir? Başlangıçta denedim:
min(f(x) for x in l)
Ama bu veriyor 0
, değil 3
. Eğer kısalık yerine okunabilirlik için çekim yapsaydım, yapardım:
index = 0
smallest = f(l[0])
for i in range(len(l)):
value = f(l[i])
if value < smallest:
smallest = value
index = i
Bu güzel, ama kod-golf için korkunç. Golf olsa bile
i,s=0,f(l[0])
for x in range(len(l)):
v=f(l[x])
if v<s:s,i=v,x
Bu kötü bir çözüm. Aklıma gelen en kısa çözüm:
g=[f(x)for x in l];print(l[g.index(min(g))])
(44 bayt) Bunu nasıl daha fazla golf oynayabilirim?
min(l,key=f)
.