web-dev-qa-db-ja.com

文字列のポップに相当

非常に大きな文字列が与えられます。次のようなループで文字列の一部を処理したいと思います。

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

これを行うための優れた効率的な方法は何ですか?

9
Martin Flucka

文字列を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
13
Fred Foo

文字列をリストに変換できます。 list(string)そしてそれをポップするか、リストをスライスするチャンクで繰り返すことができます[]または、文字列をそのままスライスして、チャンクで繰り返すことができます

9
dm03514

これは スライス で行うことができます:

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

Dm03514の回答をフォローアップするには、次のようにします。

output = ""
ex = "hello"
exList = list(ex)
exList.pop(2)
for letter in exList:
    output += letter

print output # Prints 'helo'
0
Patrick Old