[我想从“ 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位)
您知道您的清单要多久吗?它是36 ** 6 = 2176782336项目。内存太大了。您应该使用过发电机:
dictionary = 'abcdefghijklmnopqrstuvwxyz0123456789'
for x in itertools.product(dictionary, repeat=6):
print(''.join(x))
输出列表包含36**6 = 2176782336
个元素。请注意,itertools.product
返回一个元组的迭代器,因此与其将迭代器转换为列表,还不如将其迭代到列表上。
>>> for x in itertools.product(dictionary, repeat=6):
... print(x)
...
('a', 'a', 'a', 'a', 'a', 'a')
('a', 'a', 'a', 'a', 'a', 'b')
('a', 'a', 'a', 'a', 'a', 'c')
('a', 'a', 'a', 'a', 'a', 'd')
('a', 'a', 'a', 'a', 'a', 'e')
('a', 'a', 'a', 'a', 'a', 'f')