J'ai une liste l
et une fonction f
. f
n'augmente ni ne diminue strictement. Comment trouver l'élément de la liste dont f(item)
le plus petit est? Par exemple, supposons que la liste soit:
l = [1, 2, 3, 4]
et list(f(x)for x in l)
c'est:
[2, 9, 0, 3]
f(3)
est plus petit que f de tous les autres, il devrait donc afficher "3". Quelle est la manière la plus courte de procéder? J'ai d'abord essayé:
min(f(x) for x in l)
Mais cela donne 0
, non 3
. Si je tournais pour plus de lisibilité, pas de concision, je ferais:
index = 0
smallest = f(l[0])
for i in range(len(l)):
value = f(l[i])
if value < smallest:
smallest = value
index = i
C'est bien, mais horrible pour le code-golf. Même s'il a été joué au golf
i,s=0,f(l[0])
for x in range(len(l)):
v=f(l[x])
if v<s:s,i=v,x
C'est une mauvaise solution. La solution la plus courte à laquelle je peux penser est:
g=[f(x)for x in l];print(l[g.index(min(g))])
(44 octets) Comment puis-je continuer à jouer au golf?
min(l,key=f)
.Réponses:
Utiliser la
key
propriété demin
Comme l'a dit @vaultah, utilisez
min(l,key=f)
.min(l,key=f)
prend le minimum def(i)
pouri
dansl
.Il est également possible de l'appliquer à
max
, etsorted
. Par exemple,max(l,key=f)
est le maximum def(i)
pouri
dansl
. Poursorted
, l'utilisation serait:sorted(l,key=f)
.la source