如何在Python中分块循环处理列表数据(每次处理20行)
嘿,这个分块迭代(chunking/iterating in chunks)的需求其实超容易解决,给你几个简洁直观的Python方案,完全贴合你想要的循环逻辑:
方案1:直接用列表切片(最简洁直观)
因为你已经把文件内容读到了列表Input里,用range配合步长就能轻松分块:
chunk_size = 20 # 从0开始,每次跳20个索引,遍历所有分块 for i in range(0, len(Input), chunk_size): # 取出当前块的内容,最后一块不足20行也会自动处理 current_chunk = Input[i:i+chunk_size] magic_function(current_chunk)
这个方法代码少、易理解,100行刚好分成5个20行的块,完美适配你的场景。
方案2:用生成器函数(可复用+内存友好)
如果之后你需要频繁做分块操作,或者处理的文件远大于100行,写个生成器函数可以复用,而且不会一次性把所有分块都加载到内存里:
def chunk_generator(sequence, chunk_size): # 按步长遍历序列的索引 for start_idx in range(0, len(sequence), chunk_size): # 生成当前分块 yield sequence[start_idx:start_idx+chunk_size] # 循环调用生成器,处理每个分块 for chunk in chunk_generator(Input, 20): magic_function(chunk)
方案3:用itertools.islice(适合迭代器场景)
如果你之后不想把整个文件读到列表里(比如超大文件),itertools.islice可以直接对文件迭代器分块,当然也适用于你现在的列表:
from itertools import islice # 把列表转成迭代器 input_iter = iter(Input) while True: # 每次从迭代器里取20个元素 chunk = list(islice(input_iter, 20)) # 如果chunk为空,说明已经处理完所有内容,退出循环 if not chunk: break magic_function(chunk)
这几个方案都能实现你想要的for (20 lines) in Input as lines: magic_function(lines)逻辑,其中方案1是最直接的,完全满足你的需求~
内容的提问来源于stack exchange,提问作者Tedd Johnson
相关产品推荐
相关产品推荐

