如何遍历列表并按指定数量拆分生成子列表?
列表按指定长度拆分的解决方案
给定列表:
test = ['1', '1', '1', '1', '1', '1']
和指定数字(如num = 2),需要将原列表拆分为每个子列表包含指定数量元素的新列表。例如num=2时期望得到:
[['1','1'], ['1','1'], ['1','1']]
num=3时期望得到:
[['1', '1', '1'], ['1','1','1']]
以下是两种可行的解决方案:
方法一:切片推导式(简洁高效)
利用Python的切片特性,一行代码就能完成拆分:
test = ['1', '1', '1', '1', '1', '1'] num = 2 result = [test[i:i+num] for i in range(0, len(test), num)] print(result)
原理:range(0, len(test), num)生成从0开始、步长为num的索引序列,每次通过test[i:i+num]截取对应长度的子列表,最终组成结果列表。
方法二:循环实现(对应你提供的未完成代码)
如果想用循环逐步处理元素,可以这样写:
test = ['1', '1', '1', '1', '1', '1'] num = 2 result = [] current_sublist = [] for item in test: current_sublist.append(item) # 当当前子列表长度达到指定值时,存入结果并重置临时列表 if len(current_sublist) == num: result.append(current_sublist) current_sublist = [] # 处理原列表长度不是num整数倍时的剩余元素(本例中无需执行) if current_sublist: result.append(current_sublist) print(result)
原理:用临时列表current_sublist收集元素,每收集到num个元素就将其加入结果列表,然后清空临时列表继续收集下一组。最后如果还有未凑满num的元素,也一并加入结果。
内容的提问来源于stack exchange,提问作者cchris1
相关产品推荐
相关产品推荐

