首页 > 解决方案 > 如何分批处理 N 个元素的列表,而不会丢失最后一个?

问题描述

抱歉问题的措辞。

我正在读取一个文件,经过一些操作后,我将该行添加到列表中。我想阅读 100 行,将其附加到列表中,然后发送并重复该过程。

我一直在做line_count % 100 == 0然后发送我的列表但是最后的 34 行代码不会被发送,我该如何实现呢?

重现的最少代码:

lst = [1,2,3,4,5,6,7,8,9,10,11]

line_count = 0

final_lst = []
for line in lst:
    line_count += 1
    final_lst.append(line)
    if line_count % 2 == 0:
        print(f"succesfully sent:{final_lst}")

输出:

succesfully sent:[1, 2]
succesfully sent:[1, 2, 3, 4]
succesfully sent:[1, 2, 3, 4, 5, 6]
succesfully sent:[1, 2, 3, 4, 5, 6, 7, 8]
succesfully sent:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

如果您打印,它将成功发送至 [1,2,3,....,10]

标签: python

解决方案


您是否可以简单地添加一个检查以始终在循环的最终迭代中执行“发送”:

lst = [1,2,3,4,5,6,7,8,9,10,11]

line_count = 0

final_lst = []
for line in lst:
    line_count += 1
    final_lst.append(line)
    if line_count % 2 == 0 or line_count == len(lst):
        print(f"succesfully sent:{final_lst}")

输出:

succesfully sent:[1, 2]
succesfully sent:[1, 2, 3, 4]
succesfully sent:[1, 2, 3, 4, 5, 6]
succesfully sent:[1, 2, 3, 4, 5, 6, 7, 8]
succesfully sent:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
succesfully sent:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

如果我们使用以下代码,我们还可以稍微简化一下代码enumerate

lst = [1,2,3,4,5,6,7,8,9,10,11]

final_lst = []
for line_count, line in enumerate(lst, start=1):
    final_lst.append(line)
    if line_count % 2 == 0 or line_count == len(lst):
        print(f"succesfully sent:{final_lst}")

推荐阅读