2012-06-15 12 views
7

एक बहुत बड़ी स्ट्रिंग को देखते हुए। मैं इस तरह एक पाश में स्ट्रिंग के कुछ हिस्सों पर कार्रवाई करना चाहते हैं:तारों पर पॉप के लिए समतुल्य

large_string = "foobar..." 
while large_string: 
    process(large_string.pop(200)) 

ऐसा करने का एक अच्छा और कारगर तरीका क्या है?

+4

आप वास्तव में क्या चाहते हैं? पहले 200 अक्षर? 200 वां चरित्र? कुछ और? –

+1

@KarlKnechtel जबकि लूप स्पष्ट रूप से दिखा रहा है कि मैं स्ट्रिंग के सभी पात्रों को संसाधित करना चाहता हूं? –

+1

ऐसा लगता है कि आप बड़े_स्ट्रिंग के 200 वें चरित्र को तब तक हटाना और संसाधित करना चाहते हैं जब तक पॉप "इंडेक्स त्रुटि: पॉप इंडेक्स सीमा से बाहर" –

उत्तर

14

आप स्ट्रिंग लपेट कर सकते हैं StringIO या BytesIO में और यह दिखाएं कि यह एक फ़ाइल है। यह बहुत तेज़ होना चाहिए।

from cStringIO import StringIO 
# or, in Py3/Py2.6+: 
#from io import BytesIO, StringIO 

s = StringIO(large_string) 
while True: 
    chunk = s.read(200) 
    if len(chunk) > 0: 
     process(chunk) 
    if len(chunk) < 200: 
     break 
+2

मुझे 6 सेकंड तक मारो। – mgilson

+0

यदि वह अंत से स्ट्रिंग का उपभोग करना चाहता है तो यह काम नहीं करता है। – schlamar

+0

@ ms4py सौभाग्य से भाग का क्रम मेरे काम के लिए कोई फर्क नहीं पड़ता –

6

आप स्ट्रिंग को एक सूची में परिवर्तित कर सकते हैं। list(string) और इसे पॉप, या आप मात्रा में पुनरावृति सकता सूची [] टुकड़ा करने की क्रिया या आप स्ट्रिंग काट कर सकते हैं और मात्रा में पुनरावृति

3

आप slicing के साथ ऐसा कर सकते हैं:

large_string = "foobar..." 
while large_string: 
    process(large_string[-200:]) 
    large_string = large_string[:-200] 
+3

यह बहुत अपर्याप्त है। न केवल इसलिए कि यह दो बार स्लाइसिंग करता है, लेकिन क्योंकि यह ओ (एन²) समय एल्गोरिदम का उपयोग करता है। –

संबंधित मुद्दे