📅  最后修改于: 2023-12-03 14:46:14.763000             🧑  作者: Mango
在 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]]
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 个列表的几种常见方法。根据实际需求和数据结构,选择合适的方法来实现列表分解操作。