यह उल्लेख है कि every recursion can be converted into iteration, हालांकि कभी-कभी लगता है कि इतना आसान नहीं हो सकता है लायक है। प्रश्न में विशेष उदाहरण के लिए, यह इतना आसान है, यह केवल एक चर में अपेक्षित परिणाम जमा करने और उचित क्रम में इनपुट सूची को स्थानांतरित करने का विषय है।
def convert(lst):
acc = {}
for e in reversed(lst):
acc = {e: acc}
return acc
या भी कम, ऊपर एल्गोरिथ्म एक एक लाइनर के रूप में व्यक्त किया जा सकता है (यह मानते हुए अजगर 2.x, अजगर 3.x reduce
में functools
मॉड्यूल के लिए ले जाया गया था): यह मैं क्या मतलब है। गौर करें कि पिछले समाधान में चर नाम लैम्ब्डा के मानकों के अनुरूप है, और कैसे दोनों ही मामलों में संचायक का प्रारंभिक मूल्य {}
है:
def convert(lst):
return reduce(lambda acc, e: {e: acc}, reversed(lst), {})
किसी भी तरह से, समारोह convert
काम करता है के रूप में उम्मीद:
mylist = ['a','b','c','d']
convert(mylist)
=> {'a': {'b': {'c': {'d': {}}}}}
स्रोत
2012-11-05 18:46:11
खैर, प्रत्यावर्तन === यात्रा है, तो हाँ। क्या आपके पास यह दिखाने के लिए कोई कोड है कि आपने क्या प्रयास किया है? शायद एक जवाब उस से बना सकता है। – Makoto
आप बस 'मानचित्र' का उपयोग कर सकते हैं, ' –
@Makoto को कम करें, मेरे मन में कोई विशिष्ट उपयोग केस नहीं है। मैं बस कई एफओएसएस परियोजनाओं की समीक्षा कर रहा था और देखा कि अधिकांश, यदि सभी नहीं, तो रिकर्सन (गलत तरीके से नहीं) का उपयोग किया जाता है। यह मुझे अभी सोच रहा है कि रिकर्सन का विकल्प था या नहीं। ऑस्कर लोपेज़ का जवाब बल्कि अंतर्दृष्टि (विशेष रूप से लिंक) है। –