如何将含约200个元素的列表打乱并划分为各含19元素的子列表?
问题分析
你写的代码存在几个核心问题:
- 列表元素都是单个整数,但代码里用了
for a, b in list_ids,试图把每个元素拆成两个值,会直接抛出ValueError - lambda里的
list_ids[1]是取原列表的第二个元素,不是当前要排序的元素,逻辑完全错误 - 用这种复杂方式打乱列表没必要,Python标准库有更直接的实现方法
正确实现方案
要完成「打乱列表→分割为19元素子列表」的需求,分两步即可:
1. 打乱列表
用random.shuffle()方法原地打乱列表(如果不想修改原列表,先复制一份)。
2. 分割子列表
通过切片循环按步长19分割打乱后的列表。
完整代码示例:
import random list_ids = [10148, 10149, 10150, 10151, 10152, 10153, 10154, 10155, 10156, 10157, 10158, 10159, 10160, 10161, 10163, 10164, 10165, 10167, 10168, 10169, 10170, 10171, 10172, 10173, 10174, 10175, 10177, 10178, 10179, 10180, 10181, 10182, 10183, 7137, 7138, 7139, 7142, 7143, 7148, 7150, 7151, 7152, 7153, 7155, 7156, 7157, 9086, 9087, 9088, 9089, 9090, 9091, 9094, 9095, 9096, 9097, 2164] # 复制原列表避免修改原始数据,然后打乱 shuffled_ids = list_ids.copy() random.shuffle(shuffled_ids) # 分割为每个包含19个元素的子列表 chunk_size = 19 result = [shuffled_ids[i:i+chunk_size] for i in range(0, len(shuffled_ids), chunk_size)] # 查看结果 for idx, chunk in enumerate(result, 1): print(f"子列表 {idx}: {chunk}")
代码说明
list.copy():创建原列表的浅拷贝,保证原始数据不受打乱操作影响random.shuffle():Python官方推荐的高效列表打乱方法,原地修改列表- 列表推导式的切片逻辑:从索引
i开始取最多19个元素,步长设为19,自动循环到列表末尾
你的原列表总共有57个元素,刚好能分成3个各含19元素的子列表,不会有剩余元素。
内容的提问来源于stack exchange,提问作者LivingstoneM
相关产品推荐
相关产品推荐

