Python - 提高 Itertools 排列计算的性能速度;重复=15

Posted

技术标签:

【中文标题】Python - 提高 Itertools 排列计算的性能速度;重复=15【英文标题】:Python - Increasing performance speed of permutation calculation of Itertools; repeat=15 【发布时间】:2015-06-06 03:41:58 【问题描述】:

当repeat大于15时,使用itertools有哪些增加计算的方法?

permutation.py

#import string

inputRepeat = input('>>> Enter repeat value. (int): ')
L = string.ascii_uppercase

i = list(''.join(x) for x in itertools.product(L, repeat=inputRepeat))
print i

当重复变大时,代码在以某种方式输出之前存储/计算到内存中。使用内存管理解决方案优化版本的方法。

分享你的想法!

【问题讨论】:

我认为这是问题的本质。我很惊讶你没有在 repeat=15 时耗尽内存! 旁白:你对字母X有什么看法? (如果您打算包含所有大写字母,则应改用string.ascii_uppercase,以避免出现此类问题。) 当重复较大时,我从其他用户那里进行了一些研究,我收集到这不是代码;从目前的角度来看,它是有效的。是否有方法可以用于部分迭代,例如一次 X 次排列,然后在完成后继续到下一个数量? 感谢帝斯曼的提示! 您正在尝试列出超过一千亿的事物。这永远行不通;解决方案是找到一种非暴力的方式来做任何你想用这个列表做的事情。 【参考方案1】:

根据您使用列表元素的方式,您不需要将它们保存在内存中。这就是itertools 为你做的事情

import string
import itertools

inputRepeat = input('>>> Enter repeat value. (int): ')
L = string.ascii_uppercase

#i = list(''.join(x) for x in itertools.product(L, repeat=int(inputRepeat)))
#print(i)

for rep in itertools.product(L, repeat=int(inputRepeat)):
    print(''.join(rep))

但问题的复杂性仍然存在......

【讨论】:

以上是关于Python - 提高 Itertools 排列计算的性能速度;重复=15的主要内容,如果未能解决你的问题,请参考以下文章

python itertools模块实现排列组合

Python Itertools 仅排列字母和数字

Python Itertools 字符串排列

python itertools 具有绑定值的排列

提高 itertools.permutations 性能

什么是 Python itertools 的 Ruby 等价物,尤其是。组合/排列/分组?