如何将列表精确分割为n个随机大小的子列表
实现列表的指定数量随机分割
将长度大于n的列表精确分割为n个随机大小的子列表(每个子列表至少包含1个元素),无需限制子列表的最大/最小尺寸,也不采用均等分布的分割方式,可通过以下Python代码实现:
import random def split_list_into_n_random_chunks(lst, n): m = len(lst) if m <= n: raise ValueError("列表长度必须大于要分割的子列表数量") # 从元素间隙中随机挑选n-1个不重复的分割点并排序 split_indices = sorted(random.sample(range(1, m), n-1)) chunks = [] start = 0 # 根据分割点切片生成子列表 for idx in split_indices: chunks.append(lst[start:idx]) start = idx chunks.append(lst[start:]) return chunks # 示例使用 lst = [1,2,3,4,5,6,7,8] n = 3 chunks = split_list_into_n_random_chunks(lst, n) print(chunks)
代码逻辑说明
- 先校验列表长度:只有当原列表长度大于n时,才能分割出n个至少含1个元素的子列表,否则抛出异常。
- 生成分割点:原列表有
m个元素时,元素间共有m-1个可分割的间隙,从中随机选取n-1个不重复的位置作为分割点,排序后保证分割顺序与原列表一致。 - 切片生成子列表:遍历分割点,对原列表进行分段切片,最终得到n个随机大小的子列表。
每次运行代码都会得到不同的分割结果,比如可能输出[[1,2,3],[4],[5,6,7,8]]或[[1],[2,3,4,5],[6,7,8]]等,完全满足随机尺寸的需求。
内容的提问来源于stack exchange,提问作者funkephi
相关产品推荐
相关产品推荐

