python - 如何分批处理 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]
解决方案
您是否可以简单地添加一个检查以始终在循环的最终迭代中执行“发送”:
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}")
推荐阅读
- java - 我的 ListView 的意图没有改变我的活动
- angular - 基于模板引用将焦点设置在输入上
- php - 使用 php 对新关键字没有强制的链式方法能力
- linux-kernel - GFP_KERNEL 与 GFP_DMA 和 kmalloc() 与 dma_alloc_coherent()
- java - 安卓; 执行方法时如何显示按钮
- xcode - xcode 8 无法在 macOS 10.14 上打开
- android - 如何在android的编辑文本中显示错误消息?
- sql - Oracle SQL:向日期添加小时数
- perl - 如何在bash中分隔一列的字段?
- neo4j - Neo4J 桌面版:数据库无法重新启动:数据库 [database-f6b0d9de-9954-4197-955c-ceb200b57d92] 'v3.4.7' 退出,状态为 'KILLED'