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

如何在Python中按指定比例获取列表的随机子列表?

实现按比例抽取列表随机子列表

现有列表:

l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

我们需要获取该列表的随机比例子列表,即长度为len(l) * frac的随机子列表。例如当frac=0.2时,输出列表长度应为2(0.2×10)。预期效果如下:

l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
l_new = sample(list=l, frac=0.3) # [4, 6, 8]
l_new = sample(list=l, frac=0.6) # [0, 1, 4, 6, 7, 8]

已知random.sample函数需要指定元素数量而非比例,请问如何实现上述功能?


实现方案

你可以自己封装一个sample函数,核心逻辑是先根据比例计算抽取数量,再调用random.sample完成随机抽取。同时要处理极端情况,避免抽取数量异常。

代码示例

import random

def sample(lst, frac):
    # 按比例计算抽取数量,用round()做四舍五入处理
    sample_size = round(len(lst) * frac)
    # 限制抽取数量在合理范围,防止frac超出0-1导致报错
    sample_size = max(0, min(sample_size, len(lst)))
    return random.sample(lst, sample_size)

# 测试使用
l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(sample(l, 0.3))  # 输出类似 [4,6,8] 的长度为3的随机子列表
print(sample(l, 0.6))  # 输出类似 [0,1,4,6,7,8] 的长度为6的随机子列表

补充说明

  • 如果需要严格向下取整(比如frac=0.3时直接取3,不做四舍五入),可以把round()换成int():
    sample_size = int(len(lst) * frac)
    
  • max(0, min(sample_size, len(lst)))的作用是防止传入的frac小于0或大于1时,出现抽取数量为负或者超过列表长度的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 22:01:04