Cho một chuỗi rất lớn. Tôi muốn xử lý các phần của chuỗi trong vòng lặp như sau:Tương đương với pop trên dây
large_string = "foobar..."
while large_string:
process(large_string.pop(200))
Cách tốt nhất và hiệu quả để làm việc này là gì?
Cho một chuỗi rất lớn. Tôi muốn xử lý các phần của chuỗi trong vòng lặp như sau:Tương đương với pop trên dây
large_string = "foobar..."
while large_string:
process(large_string.pop(200))
Cách tốt nhất và hiệu quả để làm việc này là gì?
Bạn có thể quấn dây trong một số StringIO
hoặc BytesIO
và giả vờ là một tệp. Điều đó sẽ khá nhanh.
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
bạn có thể chuyển đổi chuỗi thành danh sách. list(string)
và bật nó, hoặc bạn có thể lặp lại trong khối slicing danh sách []
hoặc bạn có thể cắt các chuỗi như là và lặp trong khối
Bạn có thể làm điều này với slicing:
large_string = "foobar..."
while large_string:
process(large_string[-200:])
large_string = large_string[:-200]
Điều này khá lãng phí. Không chỉ vì nó cắt hai lần, mà bởi vì nó sử dụng thuật toán thời gian O (n²). –
Chính xác bạn muốn gì? 200 ký tự đầu tiên? Nhân vật thứ 200? Thứ gì khác? –
@KarlKnechtel Không phải là vòng lặp trong khi rõ ràng cho thấy rằng tôi muốn xử lý tất cả các ký tự của chuỗi? –
Dường như bạn muốn loại bỏ và xử lý ký tự thứ 200 của chuỗi lớn cho đến khi pop ném "IndexError: chỉ mục pop ra khỏi phạm vi" –