6
मेरे पास एक जनरेटर है जो मैं दो स्तरों पर फिर से शुरू करना चाहता हूं। पहला स्तर असमान रूप से दूरी पर है, तो मैं अगले स्तर को 5 के समूहों में बदलना चाहता हूं। मुझे इसे मेमोरी कुशल होने और जनरेटर इनपुट पर काम करने की आवश्यकता है, इसलिए मैं निम्नलिखित की तरह कुछ कर रहा हूं। मुझे लगता है कि एक बेहतर तरीका हो सकता है? विशेष रूप से, मैं असमान लंबाई परिणामों में पिछली संख्या नहीं चाहता हूं।पायथन में एक खंड आकार अनुक्रम के साथ grouper?
import itertools
def dynamic_grouper(iterable, intervals):
for i in intervals:
inner_iter = list(itertools.islice(iterable, i)) # this is a "group"
yield inner_iter
iterable = iter(xrange(100))
chunk_sizes = [22,30,38,10]
for i,group in enumerate(dynamic_grouper(iterable, chunk_sizes)):
args = [iter(group)] * 5
for item in itertools.izip_longest(fillvalue=None, *args):
print "Group %i" % i
print "Items %s" % list(item)
धन्यवाद, यह लगता है कि यह काम कर देता है। – jseabold
यदि यह जनरेटर है तो 'len (l)' 'l' पर क्या प्रभाव पड़ता है? क्या वह 'एल' के पूर्ण पढ़ने को मजबूर नहीं करेगा, उदा। 'भाग (file.readlines(), 2)'? – Harvey
'एल' एक सूची है, जनरेटर नहीं। जेनरेटर को 'लेन' लगाने से टाइपएरर बढ़ेगा। ध्यान दें कि 'dynamic_grouper' सूचियां प्रदान कर रहा है, इसलिए ऊपर, 'समूह' एक सूची है। इसलिए 'चंक्स (समूह, 5)' को कॉल करना ठीक है। – unutbu