📜  python 将列表分解为 n 个列表 - Python (1)

📅  最后修改于: 2023-12-03 14:46:14.763000             🧑  作者: Mango

Python 将列表分解为 n 个列表

在 Python 编程中,我们有时需要将一个大的列表分解成多个小的列表。这种操作可以使用很多种不同的方法来实现。本文将介绍几种常见的方法来实现这个目标。

方法一:使用切片
def split_list(list_to_split, n):
    length = len(list_to_split)
    avg = length // n
    remainder = length % n
    result = []
    start = 0
    for i in range(n):
        if i < remainder:
            end = start + avg + 1
        else:
            end = start + avg
        result.append(list_to_split[start:end])
        start = end
    return result

使用切片的方法是将列表的长度除以 n,然后使用切片操作将列表分解为 n 个子列表。如果列表的长度不能被 n 整除,余数部分将平均分配给前面的子列表。

示例用法:

my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
result = split_list(my_list, 3)
print(result)  # [[1, 2, 3, 4], [5, 6, 7], [8, 9, 10]]
方法二:使用列表推导式
def split_list(list_to_split, n):
    avg = len(list_to_split) // n
    remainder = len(list_to_split) % n
    split_lengths = [avg + 1 if i < remainder else avg for i in range(n)]
    result = [list_to_split[i:i+length] for i, length in enumerate(split_lengths)]
    return result

这种方法使用列表推导式来生成每个子列表。与切片方法类似,如果列表的长度不能被 n 整除,余数部分会分配给前面的子列表。

示例用法:

my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
result = split_list(my_list, 3)
print(result)  # [[1, 2, 3, 4], [5, 6, 7], [8, 9, 10]]
方法三:使用 itertools 模块
from itertools import zip_longest

def split_list(list_to_split, n):
    avg = len(list_to_split) // n
    remainder = len(list_to_split) % n
    split_lengths = [avg + 1 if i < remainder else avg for i in range(n)]
    fillvalue = None
    result = [list(group) for group in zip_longest(*[iter(list_to_split)] * avg, fillvalue=fillvalue)]
    return result

这种方法使用了 itertools 模块的 zip_longest 函数,它可以将列表分解成指定长度的子列表。如果列表的长度不能被 n 整除,余数部分将以填充值(这里设为 None)填充。

示例用法:

my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
result = split_list(my_list, 3)
print(result)  # [[1, 2, 3, 4], [5, 6, 7], [8, 9, 10]]

以上是将列表分解为 n 个列表的几种常见方法。根据实际需求和数据结构,选择合适的方法来实现列表分解操作。