猿问

如何在 Python 中通过重复获得每个 6 元素排列?

我想从“abcdefghijklmnopqrstuvwxyz0123456789”创建所有可能的 6 元素排列的列表,例如它应该输出:


['aaaaaa','aaaaab','aaaaac'...,'aaaaa0','aaaaa1'...,'aaaaba','aaaabb'...]等等。


这是我尝试过的:


import itertools


dictionary = 'abcdefghijklmnopqrstuvwxyz0123456789'

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

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


(我使用的是 Python 3.8 64 位)


HUH函数
浏览 102回答 2
2回答

拉莫斯之舞

你知道你的名单会有多长吗?它是 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 getsizeofgetsizeof('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.在不知道您要对产品做什么的情况下,我无法具体告诉您如何优化它。但我仍然可以说尝试将此迭代器转换为 alist是一个坏主意。
随时随地看视频慕课网APP

相关分类

Python
我要回答