微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

创建多项选择测验答案组合列表的内存高效方法具有特定条件?

如何解决创建多项选择测验答案组合列表的内存高效方法具有特定条件?

我正在尝试创建一个包含多项选择测验的所有可能答案组合的列表。测验中有 30 个问题,有 4 个可能的答案:['agree','disagree','neither','skip']输出应该是包含 30 个问题的所有可能答案组合的子列表列表,例如:

[['agree','agree','agree'],['agree','disagree'],etc. ...]

一个警告skip 的回答只能达到最大值。每个测验 15 个问题。

看来 itertools.product 是最直接的解决方案,所以我尝试了:

from itertools import product
combinations = product(['agree','skip'],repeat=30)

然而,这是非常低效的内存,并且不断使我的 Colab 会话崩溃。是否有一种内存效率高的解决方案实际上可以让我生成测验答案的组合,最重要的是:我如何实现每个测验最多 15 个 skip 答案?

解决方法

你在使用 python2 吗?

Python3 的 itertool.product 不应该使您的 RAM 爆炸。它应该只是一个生成器。

您的代码应该按原样工作,但是它会运行很长一段时间(正如其他人指出的那样,“相当长的时间”意味着您不希望用计算机的计算能力等待一段时间。如果我没有算错,如果你的电脑每秒能处理 100 万个组合,你就得等上大约 36000 年)

In [21]: 4**30 / 10**6 / 60 / 60 / 24 / 365                                                                                         
Out[21]: 36558.901084692

请使用 python 3 运行以下代码:

choices = ['agree','disagree','neither','skip']
for i,answer in enumerate(itertools.product(choices,repeat=30)):
    pass
print(i)

使用您的流程监视器,您应该会看到,您的流程不需要 大量内存,但只是大量 CPU。

只有最多 15 个跳过值的答案的蛮力解决方案是获取所有可能性并拒绝具有更多可能性的那些。

另一种方法是首先创建所有答案,其中仅包含 ['agree','neither'], 然后所有答案正好是 1 'skip',在所有可能的位置跳过 然后所有答案都恰好是 2 'skip' 秒,并在所有可能无法区分的位置上跳过。 ...

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?