【前言】
大家好,这里是 Charming讲Python编码小技巧 系列专栏。每天分享一个 30-seconds-of-python 仓库中的神级写法,助你告别“屎山”代码,写出让人眼前一亮的 Pythonic 风格!

1. 小技巧内容描述

当你处理大列表时,常常会遇到这些场景:

  • 分页展示
  • 批量请求接口
  • 分批写入数据库
  • 分段并发处理任务

这时,如果你还在手搓下标循环,代码会越来越“重”。

今天这招来自 30-seconds-of-python把列表按指定大小切成多个小列表(chunk)

from math import ceil

def chunk(lst, size):
  return list(
    map(lambda x: lst[x * size:x * size + size],
      list(range(ceil(len(lst) / size)))))

使用示例:

chunk([1, 2, 3, 4, 5], 2)
# [[1, 2], [3, 4], [5]]

一句话:把“大任务”自动拆成“可控小任务”。

2. 为什么这么用,并列举几个例子来加强理解

为什么推荐这写法?

  • 业务实用性极高:分页、批处理、限流场景都离不开。
  • 代码表达力强:一眼就能看出“按 size 分块”的意图。
  • 性能管理更友好:分批处理通常比一次性全量处理更稳。

例子1:批量调用外部接口

user_ids = list(range(1, 11))
batches = chunk(user_ids, 3)
print(batches)
# [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]

很多接口有单次调用上限,分块后可直接循环调用,避免超限报错。

例子2:前端分页数据准备

products = ["A", "B", "C", "D", "E", "F", "G"]
pages = chunk(products, 3)
print(pages)
# [['A', 'B', 'C'], ['D', 'E', 'F'], ['G']]

每页 3 条数据,最后一页不足也能自然保留,不丢数据。

例子3:数据库分批写入

rows = [f"row_{i}" for i in range(1, 9)]
for batch in chunk(rows, 2):
    print("写入批次:", batch)

# 写入批次: ['row_1', 'row_2']
# 写入批次: ['row_3', 'row_4']
# 写入批次: ['row_5', 'row_6']
# 写入批次: ['row_7', 'row_8']

分批提交不仅更稳,也更容易失败重试。


今日小结
真正专业的代码,不是“硬扛全量”,而是“优雅拆分”。学会 chunk,你在数据处理和工程实战中会省下大量时间。

点赞 + 收藏,明天继续解锁一个 30-seconds-of-python 神级技巧!

更多推荐