F (öğe) en küçük olan bir listede öğe nasıl bulunur?


10

Bir listem lve bir fonksiyonum var f. fkesinlikle 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?


8
Sadece min(l,key=f).
vaultah

2
@vaultah Bunu bir cevap olarak gönderin.
NoOneIs Here

4
@ KevinLau-notKenny Bu bir ipucu sorusu. Bu konu üzerine.
NoOneIs Here

2
@trichoplax aslında bu olduğunu düşünüyorum: meta.codegolf.stackexchange.com/a/1724/31625
FryAmTheEggman 17:16

2
Bu, enteresan bir konu. Belki de genel, Python ile sınırlı değil? Bunu farklı dillerde nasıl yapacağınızı görmek ilginç olabilir
Luis Mendo

Yanıtlar:


10

Sitesinin keyözelliğini kullanmin

@Vaultah'ın dediği gibi kullanın min(l,key=f). min(l,key=f)minimum alır f(i)için ide l.

O bu uygulamak da mümkündür maxve sorted. Örneğin, max(l,key=f)en fazla olduğu f(i)için ide l. İçin sorted, kullanım olacaktır: sorted(l,key=f).


1
Şimdilik bunu kabul ediyorum, ancak gönderirse @vaultah'tan bir cevap kabul edeceğim.
James
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.