Ho un elenco l
e una funzione f
. f
non è strettamente crescente o decrescente. Come posso trovare l'elemento nell'elenco di cui f(item)
è il più piccolo? Ad esempio, supponiamo che l'elenco sia:
l = [1, 2, 3, 4]
ed list(f(x)for x in l)
è:
[2, 9, 0, 3]
f(3)
è più piccolo di f degli altri, quindi dovrebbe stampare "3". Qual è il modo più breve per farlo? Inizialmente ho provato:
min(f(x) for x in l)
Ma questo dà 0
, non è 3
. Se stavo girando per leggibilità, non per brevità, farei:
index = 0
smallest = f(l[0])
for i in range(len(l)):
value = f(l[i])
if value < smallest:
smallest = value
index = i
Questo va bene, ma orrendo per il code-golf. Anche se è stato giocato a golf
i,s=0,f(l[0])
for x in range(len(l)):
v=f(l[x])
if v<s:s,i=v,x
Questa è una cattiva soluzione. La soluzione più breve che mi viene in mente è:
g=[f(x)for x in l];print(l[g.index(min(g))])
(44 byte) Come posso continuare a giocare a questo?
min(l,key=f)
.