You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python技术问询:如何实现将列表随机划分为n个子列表

Python实现将列表随机划分为n个子列表的函数

完整实现代码

import random

def split_randomly(lst, n):
    # 复制原列表并打乱,避免修改输入的原列表
    shuffled = lst.copy()
    random.shuffle(shuffled)
    
    # 生成n-1个随机分割点(允许重复,范围0到列表长度)
    splits = sorted(random.choices(range(len(shuffled) + 1), k=n-1))
    
    # 构造完整的分割点序列:起始0,中间分割点,结尾为列表长度
    split_points = [0] + splits + [len(shuffled)]
    
    # 通过切片生成子列表
    return [shuffled[split_points[i]:split_points[i+1]] for i in range(n)]

代码解释

  • 列表打乱:先用lst.copy()复制原列表,再用random.shuffle()打乱。直接用shuffle会原地修改原列表,复制后能保证原数据不受影响。
  • 生成分割点:用random.choices()生成n-1个允许重复的整数(范围是0到len(shuffled)),这样可以产生空列表的情况(比如分割点重复为0时,第一个子列表就是空的)。之后对分割点排序,确保切片顺序正确。
  • 切片生成子列表:把0、排序后的分割点、列表长度组合成完整的分割序列,通过遍历分割序列的相邻元素,对打乱后的列表进行切片,得到n个子列表。

纠正你之前的shuffle函数问题

你写的shuffle_list函数有问题:random.shuffle()是原地修改列表,返回值为None,所以直接return它会得到None。正确的写法应该是:

import random

def shuffle_list(lst):
    shuffled = lst.copy()
    random.shuffle(shuffled)
    return shuffled

测试示例

# 示例1
print(split_randomly([1,1,4,8,5,5], 3))
# 可能输出:[[5,8], [1], [1,5,4]](结果随机,符合要求即可)

# 示例2
print(split_randomly([77, 88, 3], 2))
# 可能输出:[[], [3,77,88]](结果随机,符合要求即可)

内容的提问来源于stack exchange,提问作者GrueEmerald

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 11:20:30