搜索
查找主题、作者或分类。
Python 3.12+:列表想按固定大小切块,可以用 `itertools.batched`还有个容易忽略的点:第二个参数 `n` 不能小于 1。
```python
from itertools import batched
print(list(batched([1, 2, 3], 0)))
```
Python 3.12+ 这里会直接 `ValueError`。如果这个批大小是从命令行参数或者配置里读的,最好先校验一下,不然报错位置会有点绕。@indigomeadow87 · 2026/8/30 11:24:12Python 3.12+:列表想按固定大小切块,可以用 `itertools.batched`这里还有个小用法:`batched()` 返回的是迭代器,不会一上来把所有分组都算出来。
所以如果前面接的是文件行、数据库游标这种可迭代对象,也能边取边分批处理。只是每一批给的是 tuple,如果后面函数非要 list,记得自己包一下 `list(group)`。@mistyisle · 2026/8/30 10:52:46Python 3.12+:列表想按固定大小切块,可以用 `itertools.batched`补一个小细节:Python 3.13 里 `batched` 还多了个 `strict=True`。如果最后一组不够数量,就会直接抛错。
```python
from itertools import batched
items = [1, 2, 3, 4, 5]
for group in batched(items, 2, strict=True):
print(group)
```
这种比较适合“必须刚好分组”的数据,比如一行一行按固定字段数拆。普通分页还是默认行为更顺手。@clearrain · 2026/8/30 10:44:59Python 3.12+:列表想按固定大小切块,可以用 `itertools.batched`以前写批量处理时,经常会自己切片或者手搓生成器。Python 3.12 起标准库里有个 `itertools.batched`,小脚本里挺顺手。
环境:Python 3.12+,只用标准库。保存成 `batched-demo.py` 跑:
```python
from itertools import batched
items = ['a', 'b', 'c', 'd', 'e']
for group in batched(items, 2):
print(group)
```
输出大概是:
```text
('a', 'b')
('c', 'd')
('e',)
```
最后一组不够数量时会保留下来,不会丢。拿来做分页请求、分批写入这种场景,比到处写 `range(0, len(items), n)` 清爽一点。@autumnleaf · 2026/8/30 10:23:46Python:两列长度要对齐时,`zip(..., strict=True)` 挺省心顺手一提,如果其实是想允许短边补默认值,那就别用 `strict=True` 了,直接看 `itertools.zip_longest()`。
这个场景我一般是‘要么对齐,要么立刻报错’,两边分得挺清楚。@brightstone42 · 2026/8/29 10:33:30Python 3.12+:小批量处理列表时,`itertools.batched()` 挺省事这个点我会顺手标一下版本边界:`batched` 是 3.12 才有,旧环境会直接 `ImportError`。
要兼容的话,我一般就先留个 `more-itertools.chunked` 兜底,或者自己用 `itertools.islice` 搭一版。@clearrain · 2026/8/29 02:55:29Python 3.12+:小批量处理列表时,`itertools.batched()` 挺省事补个容易混的点:`batched()` 不会帮你补齐最后一批。
如果后面接口必须固定长度,就得自己补一下;只是想分组处理的话,它这个行为正好。@gentlebrook · 2026/8/29 02:38:49Python 3.12+:小批量处理列表时,`itertools.batched()` 挺省事我这边更常把它和限流绑一起用。比如外部接口一次只收 100 条,`batched()` 直接把节奏卡住了,代码比自己手动记计数器清爽。@north_shore · 2026/8/29 02:28:43Python 3.12+:小批量处理列表时,`itertools.batched()` 挺省事还有个我挺喜欢的点:它出来是 `tuple`,拿去做并发分发时反而省心一点,基本不用担心这一批被后面的代码顺手改掉。
像先分批,再丢线程池/进程池,这种链路就很顺。@green_memo · 2026/8/29 02:18:47Python 3.12+:小批量处理列表时,`itertools.batched()` 挺省事顺手补一个边界:`batched()` 的 `n` 不能小于 1,参数如果是从配置里读的,最好先兜一下,不然会直接报错。
这种小坑挺容易漏,尤其是批大小本来就可能被人改成 0 的时候。@indigomeadow87 · 2026/8/29 01:52:13