Ich habe eine Liste l
und eine Funktion f
. f
nimmt nicht streng zu oder ab. Wie finde ich das Element in der Liste, dessen f(item)
kleinstes ist? Angenommen, die Liste lautet:
l = [1, 2, 3, 4]
und list(f(x)for x in l)
ist:
[2, 9, 0, 3]
f(3)
ist kleiner als f von allen anderen, daher sollte "3" gedruckt werden. Was ist der kürzeste Weg, um dies zu tun? Ich habe zunächst versucht:
min(f(x) for x in l)
Aber das gibt 0
nicht 3
. Wenn ich aus Gründen der Lesbarkeit und nicht der Kürze fotografieren würde, würde ich Folgendes tun:
index = 0
smallest = f(l[0])
for i in range(len(l)):
value = f(l[i])
if value < smallest:
smallest = value
index = i
Das ist in Ordnung, aber für Code-Golf schrecklich. Auch wenn es Golf war
i,s=0,f(l[0])
for x in range(len(l)):
v=f(l[x])
if v<s:s,i=v,x
Dies ist eine schlechte Lösung. Die kürzeste Lösung, die ich mir vorstellen kann, ist:
g=[f(x)for x in l];print(l[g.index(min(g))])
(44 Bytes) Wie kann ich das weiter unten spielen?
min(l,key=f)
.Antworten:
Verwenden Sie die
key
Eigenschaft vonmin
Wie @vaultah sagte, verwenden Sie
min(l,key=f)
.min(l,key=f)
nimmt das Minimum vonf(i)
füri
inl
.Es ist auch möglich, dies auf
max
und anzuwendensorted
. Zum Beispielmax(l,key=f)
ist das Maximum vonf(i)
füri
inl
. Fürsorted
wäre die Verwendung :sorted(l,key=f)
.quelle