ฉันมีรายชื่อและฟังก์ชั่นl
ไม่ได้เพิ่มหรือลดลงอย่างเคร่งครัด ฉันจะค้นหารายการในรายการที่มีขนาดเล็กที่สุดได้อย่างไร ตัวอย่างเช่นสมมติว่ารายการคือ:f
f
f(item)
l = [1, 2, 3, 4]
และlist(f(x)for x in l)
คือ:
[2, 9, 0, 3]
f(3)
เล็กกว่า f ของอันอื่นดังนั้นควรพิมพ์ "3" วิธีที่สั้นที่สุดในการทำเช่นนี้คืออะไร? ตอนแรกฉันพยายาม:
min(f(x) for x in l)
แต่นี้จะช่วยให้ไม่ได้0
3
หากฉันกำลังถ่ายภาพเพื่อความสะดวกในการอ่านไม่กระชับฉันจะทำ:
index = 0
smallest = f(l[0])
for i in range(len(l)):
value = f(l[i])
if value < smallest:
smallest = value
index = i
นี่เป็นเรื่องดี แต่น่ากลัวสำหรับรหัสกอล์ฟ แม้ว่ามันจะเป็นกอล์ฟ
i,s=0,f(l[0])
for x in range(len(l)):
v=f(l[x])
if v<s:s,i=v,x
นี่เป็นทางออกที่ไม่ดี ทางออกที่สั้นที่สุดที่ฉันนึกได้คือ:
g=[f(x)for x in l];print(l[g.index(min(g))])
(44 bytes) ฉันจะตีกอล์ฟนี้ต่อไปได้อย่างไร
min(l,key=f)
เพียงแค่