2 回答

TA贡献1820条经验 获得超10个赞
你知道你的名单会有多长吗?它是 36**6 = 2176782336 项。有点太多记不住了。您应该使用生成器:
dictionary = 'abcdefghijklmnopqrstuvwxyz0123456789'
for x in itertools.product(dictionary, repeat=6):
print(''.join(x))

TA贡献1946条经验 获得超4个赞
排列的大小是巨大的: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.
在不知道您要对产品做什么的情况下,我无法具体告诉您如何优化它。但我仍然可以说尝试将此迭代器转换为 alist是一个坏主意。
添加回答
举报