from itertools import groupby, islice
def morris():
morris = '1'
yield morris
while True:
morris = groupby(morris)
morris = ((len(list(group)), key) for key, group in morris)
morris = ((str(l), k) for l, k in morris)
morris = ''.join(''.join(t) for t in morris)
yield morris
print list(islice(morris(), 10))
सबसे पहले मैं iterator अनंत बनाने के लिए और उपभोक्ता निर्णय लेते हैं, इसके बारे में वह कितना चाहता है चाहते हैं। इस तरह वह या तो x या पहले x संख्याओं से कम प्रत्येक मॉरिस नंबर प्राप्त कर सकता है,
फिर रिकॉर्शन केवल एक सूची में पिछले मॉरिस संख्याओं की पूरी सूची को स्टोर करने की आवश्यकता नहीं है, क्योंकि रिकर्सन केवल वैसे भी n := f(n-1)
।
आखिरकार, इसे एक कार्यात्मक स्पर्श देने के लिए itertools का उपयोग करना हमेशा एक गीक बिंदु या दो के लायक होता है;) मैंने जेनरेटर अभिव्यक्ति को कई रेखाओं में विभाजित किया ताकि यह आंखों पर थोड़ा आसान हो सके।
इस समाधान में मुख्य कुरूपता इस तथ्य से आती है कि len()
एक पुनरावर्तक पर नहीं बुलाया जा सकता है और हमें एक int प्रदान करता है जहां हमें एक str की आवश्यकता होती है। दूसरी हिकअप नेस्टेड str.join है) पूरी चीज को एक स्ट्र में फिर से भरने के लिए।
आप, मनमाने ढंग से संख्या से अनुक्रम शुरू इस तरह समारोह निर्धारित करना चाहते हैं:
def morris(morris=None):
if morris is None:
morris = '1'
[...]
आपको लगता है कि जनरेटर घूम चाहते हैं, आप इसे इस प्रकार लिख सकते हैं:
def morris():
morris = '1'
yield morris
while True:
print morris
morris = ''.join(''.join(t)
for t in ((str(len(list(group))), key)
for key, group in groupby(morris)))
yield morris
मुझे यकीन नहीं है कि मुझे दो कार्यों में विभाजित करना पसंद है, लेकिन यह सबसे अधिक पढ़ने योग्य समाधान प्रतीत होता है:
def m_groupby(s):
for key, group in groupby(s):
yield str(len(list(group)))
yield key
def morris():
morris = '1'
yield morris
while True:
morris = ''.join(m_groupby(morris))
yield morris
आशा है कि आप इसे पसंद करेंगे!
यह यो की तरह लगता है आप मछली slapping नृत्य के बारे में पूछ रहे हैं। यह मॉन्टी पायथन और मॉरिस नृत्य को जोड़ता है ... :-) –
यदि इस चीज़ को कम से कम 10 वर्णों की आवश्यकता नहीं थी तो मैंने अभी जवाब दिया होगा: डी –
आप दोनों को उपज() आईएनजी और मूल्यों को संग्रहीत क्यों कर रहे हैं [] ? – Javier