मेरे पास एक सूची है, l
और एक फ़ंक्शन है f
। f
सख्ती से बढ़ती या घटती नहीं है। सूची में वह आइटम कैसे मिल सकता है जिसकी f(item)
सबसे छोटी है? उदाहरण के लिए, मान लें कि सूची है:
l = [1, 2, 3, 4]
और list(f(x)for x in l)
:
[2, 9, 0, 3]
f(3)
किसी भी अन्य की तुलना में छोटा है, इसलिए इसे "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 बाइट्स) मैं इसे और नीचे कैसे गिरा सकता हूं?
min(l,key=f)
।