如何在Python中获得每个具有重复的6元素排列



我想从"abcdefghijklmnopqrstuvxyz0123456789"创建一个所有可能的6元素排列的列表,例如它应该输出:

CCD_ 1等。

这就是我尝试的:

import itertools
dictionary = 'abcdefghijklmnopqrstuvwxyz0123456789'
print(list(itertools.product(dictionary, repeat=6)))

但我遇到了一个MemoryError,然后我的计算机完全冻结了,那么有没有更有效的方法来计算这个列表呢?

(我使用的是Python 3.8 64位(

你知道你的列表会有多长吗?为36**6=2176782336项。太多了,记不住了。你应该使用一个生成器:

dictionary = 'abcdefghijklmnopqrstuvwxyz0123456789'
for x in itertools.product(dictionary, repeat=6):
print(''.join(x))

排列的大小是巨大的:36^6!这是2176782336串。由于python存储单独对象的方式,python中的6个字符字符串已经相对较大。

from sys import getsizeof
getsizeof('aaaaaa') # 55

在每个字符串55字节的情况下,整个列表几乎是120 GB。你的机器可能没有太多内存。

如果您尝试将此迭代器转换为列表,它将同时生成所有排列。相反,您可以使用itertools.product(dictionary, repeat=6)返回的迭代器,而不将其转换为列表。

for s in itertools.product(dictionary, repeat=6):
# Do something with the string, such as writing it to a file.

在不知道你想对产品做什么的情况下,我无法具体告诉你如何优化它。但我仍然可以说,尝试将这个迭代器转换为list是个坏主意。

最新更新