
在python编程中,将一个扁平列表(big_list)重构为包含多个子列表的列表(list_of_lists)是常见需求。然而,传统方法通常涉及将原始列表按顺序切片,生成等长或不等长的子列表。本教程旨在解决一个更具挑战性的场景:
例如,给定 big_list = [1, 2, 3, 4, 5, 6, 7, 8] 和期望的子列表长度 [1, 2, 3, 2],我们希望得到的输出是 [[1], [2, 5], [3, 6, 8], [4, 7]]。
解决此问题的核心在于维护一个当前子列表的索引,并循环遍历这个索引,将 big_list 中的每个元素依次添加到尚未达到其预定长度的子列表中。
以下是实现这一转换的Python代码:
def convert_list_to_interleaved_sublists(big_list, sublist_lengths):
"""
将扁平列表转换为指定长度的子列表列表,采用交错式填充。
Args:
big_list (list): 待转换的原始扁平列表。
sublist_lengths (list): 一个整数列表,定义了每个子列表的期望长度。
Returns:
list: 转换后的子列表列表。
Raises:
AssertionError: 如果所有子列表长度之和不等于原始列表的长度。
"""
# 1. 验证输入:确保总元素数量匹配
if sum(sublist_lengths) != len(big_list):
raise AssertionError("所有子列表的期望长度之和必须等于原始列表的长度。")
# 2. 初始化:创建空的子列表列表
# lol (list_of_lists) 将存储最终结果
lol = [[] for _ in sublist_lengths]
# 3. 填充逻辑:交错式分配元素
current_sublist_index = -1 # 用于循环遍历子列表的索引
for element in big_list:
while True:
# 移动到下一个子列表
current_sublist_index += 1
# 如果索引超出子列表列表的范围,则从头开始循环
if current_sublist_index == len(lol):
current_sublist_index = 0
# 检查当前子列表是否已达到其预定长度
if len(lol[current_sublist_index]) < sublist_lengths[current_sublist_index]:
# 如果未达到,则将当前元素添加到该子列表
lol[current_sublist_index].append(element)
break # 元素已添加,跳出内层while循环,处理下一个big_list元素
# 如果已达到,则继续内层while循环,尝试下一个子列表
return lol
# 示例使用
big_list = [1, 2, 3, 4, 5, 6, 7, 8]
sublist_lengths = [1, 2, 3, 2]
try:
result_list_of_lists = convert_list_to_interleaved_sublists(big_list, sublist_lengths)
print(f"原始列表: {big_list}")
print(f"子列表长度定义: {sublist_lengths}")
print(f"转换结果: {result_list_of_lists}")
except AssertionError as e:
print(f"错误: {e}")
# 另一个示例
big_list_2 = ['a', 'b', 'c', 'd', 'e', 'f']
sublist_lengths_2 = [2, 1, 3]
try:
result_list_of_lists_2 = convert_list_to_interleaved_sublists(big_list_2, sublist_lengths_2)
print(f"\n原始列表: {big_list_2}")
print(f"子列表长度定义: {sublist_lengths_2}")
print(f"转换结果: {result_list_of_lists_2}")
except AssertionError as e:
print(f"错误: {e}")输出示例:
原始列表: [1, 2, 3, 4, 5, 6, 7, 8] 子列表长度定义: [1, 2, 3, 2] 转换结果: [[1], [2, 5], [3, 6, 8], [4, 7]] 原始列表: ['a', 'b', 'c', 'd', 'e', 'f'] 子列表长度定义: [2, 1, 3] 转换结果: [['a', 'd'], ['b'], ['c', 'e', 'f']]
本文详细介绍了一种将扁平列表转换为具有预定义不同长度子列表的结构,并采用特殊交错填充方式的Python实现。通过循环索引和条件判断,我们能够精确地将原始列表的元素分配到目标子列表中,满足了非传统的数据重组需求。虽然该方法对于大型数据集可能存在性能瓶颈,但对于一般场景而言,它提供了一个清晰且有效的解决方案。
以上就是将扁平列表转换为指定长度子列表的交错填充方法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号