我正在尝试确定 87 个不同字符串的所有组合,这些组合可以组成 29 个元素的序列。我在 python 中使用组合来执行此操作,如果序列只有 4 个元素长,但它无法处理 29 个元素,则效果很好。这是我正在使用的代码:
combos = itertools.combinations(testv, 29)
usable_combos = []
for i in combos:
usable_combos.append(i)
但代码在循环阶段失败。我认为这是某种内存问题,但我不知道如何解决它。有什么建议么?
你正在尝试填充一个大量元组进入此处的列表。101.416.867.967.028.166.758.360 不同的元组 http://www.wolframalpha.com/input/?i=Binomial%5B87%2C+29%5D,准确地说。一个数字如此之大,我什至不知道如何拼写它,但你可以从101 又近六分之一 http://en.wikipedia.org/wiki/Names_of_large_numbers作为近似值。
当你组合 4 个元素时,只有2.225.895 种不同的组合 http://www.wolframalpha.com/input/?i=Binomial%5B87%2C+4%5D(略多于 200 万),这是相当容易管理的,但是您将其提升到大多数计算机根本无法一次将其全部存储在内存中的水平。
与其将所有内容添加到列表中,然后使用该列表,不如处理这些组合当你循环播放时:
for i in combos:
# process i, move on
或者找到一种不同的方法来解决您的问题,该方法不涉及循环所有可能的组合。也许有一些方法可以减少您实际需要考虑的组合数量?
顺便说一句,而不是使用for
循环和list.append()
,你可以直接使用:
combos = itertools.combinations(testv, 4)
usable_combos = list(combos)
创建您的列表。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)