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

如何执行多次random.choices测试并优化代码将结果写入CSV文件

解决方案

代码优化与功能实现步骤

一、优化原代码的内存占用

原代码创建包含10000个元素的marbles列表完全没必要——既然红蓝弹珠的概率都是50%,直接按概率随机生成样本就行,不用预存这么多元素,能省不少内存,尤其是做大量重复试验的时候。

二、实现A1.primo()函数

先明确函数逻辑:重复做抽样试验,每次抽一个k=4的小样本和k=7的大样本,统计小样本里目标事件的出现频率比大样本高的次数(或对应的概率)。这里默认以“红色弹珠出现频率”作为目标事件,你可以按需调整。

完整可运行代码

import random
import csv

# 生成指定大小的随机样本,无需预存全量弹珠
def generate_sample(sample_size):
    return [random.choice(["RED", "BLUE"]) for _ in range(sample_size)]

# 计算样本中目标事件的频率
def get_frequency(sample, target="RED"):
    return sample.count(target) / len(sample)

class A1:
    @staticmethod
    def primo(num_trials=1000):
        """
        统计小样本(k=4)频率高于大样本(k=7)的试验占比
        :param num_trials: 总试验次数,默认1000次
        :return: 符合条件的试验比例
        """
        success = 0
        for _ in range(num_trials):
            small = generate_sample(4)
            large = generate_sample(7)
            if get_frequency(small) > get_frequency(large):
                success += 1
        # 返回比例,也可以直接返回成功次数,看你需求
        return success / num_trials

# 执行测试并保存结果到CSV
if __name__ == "__main__":
    # 执行试验,这里设10000次试验,结果更稳定
    test_result = A1.primo(num_trials=10000)
    # 写入CSV文件
    with open("marble_test_results.csv", "w", newline="", encoding="utf-8") as f:
        writer = csv.writer(f)
        # 先写表头,再写结果
        writer.writerow(["总试验次数", "小样本频率高于大样本的比例"])
        writer.writerow([10000, round(test_result, 4)])
    print(f"结果已保存到marble_test_results.csv,比例为{test_result:.4f}")

三、关键细节说明

  • 内存优化:去掉了10000元素的列表,直接生成样本,内存占用从几MB降到几乎可以忽略,适合大规模试验。
  • 函数灵活性:你可以修改num_trials参数调整试验次数,次数越多结果越接近真实概率;如果要统计其他事件(比如蓝色频率、特定红蓝组合),改get_frequency或者判断条件就行。
  • CSV保存:用Python内置的csv模块,不用装额外依赖,生成的CSV可以直接用Excel或表格软件打开查看。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 20:25:18