python如何把列表分段

python如何把列表分段

作者:Joshua Lee发布时间:2026-01-06阅读时长:0 分钟阅读次数:17

用户关注问题

Q
如何将一个列表分割成多个小列表?

我有一个很长的列表,想把它分成几个小列表,每个小列表的长度相同,该怎么实现?

A

使用切片和循环分割列表

可以利用 Python 的切片功能和循环进行列表分段。比如,定义一个函数接受列表和每段的大小,然后通过循环依次取得每个子列表。示例代码:

def split_list(lst, size):
    return [lst[i:i + size] for i in range(0, len(lst), size)]

my_list = [1,2,3,4,5,6,7,8,9]
print(split_list(my_list, 3))  # 输出 [[1,2,3],[4,5,6],[7,8,9]]
Q
有没有现成的库函数能方便地把列表分块?

我希望不用自己写循环,有没有 Python 库或者内置函数可以直接帮我把列表切分?

A

使用 itertools 模块的 grouper 方法或第三方库

Python 的 itertools 模块没有直接的分块函数,但是可以用类似 recipes 中的 grouper 函数实现。方法如下:

from itertools import zip_longest

def grouper(iterable, n, fillvalue=None):
    args = [iter(iterable)] * n
    return zip_longest(*args, fillvalue=fillvalue)

list(grouper([1,2,3,4,5,6,7], 3))  # 输出 [(1,2,3),(4,5,6),(7,None,None)]

另外,第三方库例如 more_itertools 提供了 chunked 函数可以更方便地实现这一功能。

Q
如何处理列表长度不能被均匀分段时的情况?

当列表长度不是目标分段大小的整数倍时,剩下的元素应该如何处理比较合适?

A

选择填充、忽略或者单独作为一段处理

分段时如果列表长度不能整除分段长度,方案有多种:

  • 使用切片方法,最后一个子列表可能长度不足,但保留剩余元素。
  • 使用 itertools.zip_longest 时,可以通过填充元素保持所有子列表长度一致。
  • 根据实际需求也可以忽略最后不足大小的部分。

示例:

# 不填充,保留剩余
sublists = [lst[i:i+size] for i in range(0, len(lst), size)]

# 填充空白元素
from itertools import zip_longest
args = [iter(lst)] * size
sublists = list(zip_longest(*args, fillvalue=None))