किसी सूची में आइटम को कैसे खोजें जिसका f (आइटम) सबसे छोटा है?


10

मेरे पास एक सूची है, lऔर एक फ़ंक्शन है ffसख्ती से बढ़ती या घटती नहीं है। सूची में वह आइटम कैसे मिल सकता है जिसकी 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 बाइट्स) मैं इसे और नीचे कैसे गिरा सकता हूं?


8
बस min(l,key=f)
तिजोरी

2
@vaultah उत्तर के रूप में पोस्ट करें।
NoOneIsHere

4
@ केविनलाउ-नकेनी यह एक टिप्स सवाल है। यह विषय है।
NoOneIsHere

2
@trichoplax वास्तव में मुझे लगता है कि यह एक है: meta.codegolf.stackexchange.com/a/1724/31625
FryAmTheEggman

2
यह एक दिलचस्प विषय है। शायद यह सामान्य है, पायथन तक सीमित नहीं है? यह देखना दिलचस्प हो सकता है कि विभिन्न भाषाओं में ऐसा कैसे किया जाए
लुइस मेंडो

जवाबों:


10

की keyसंपत्ति का उपयोग करेंmin

जैसा @ वल्लाह ने कहा, उपयोग करें min(l,key=f)min(l,key=f)की न्यूनतम लेता है f(i)के लिए iमें l

इसे लागू करना भी संभव है max, और sorted। उदाहरण के लिए, max(l,key=f)में अधिकतम के f(i)लिए iहै l। के लिए sorted, उपयोग होगा sorted(l,key=f):।


1
मैं इसे अभी के लिए स्वीकार कर रहा हूं, लेकिन अगर वह इसे पोस्ट करता है तो @vaultah से एक उत्तर स्वीकार करेगा।
जेम्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.