为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

HUH函数 2022-10-25 10:41:24
我想从“abcdefghijklmnopqrstuvwxyz0123456789”创建所有可能的 6 元素排列的列表,例如它应该输出:['aaaaaa','aaaaab','aaaaac'...,'aaaaa0','aaaaa1'...,'aaaaba','aaaabb'...]等等。这是我尝试过的:import itertoolsdictionary = 'abcdefghijklmnopqrstuvwxyz0123456789'print(list(itertools.product(dictionary, repeat=6)))但是我遇到了一个MemoryError然后我的电脑完全死机了,那么有没有更有效的方法来计算这个列表?(我使用的是 Python 3.8 64 位)
查看完整描述

2 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

你知道你的名单会有多长吗?它是 36**6 = 2176782336 项。有点太多记不住了。您应该使用生成器:


dictionary = 'abcdefghijklmnopqrstuvwxyz0123456789'

for x in itertools.product(dictionary, repeat=6):

    print(''.join(x))


查看完整回答
反对 回复 2022-10-25
?
绝地无双

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是一个坏主意。


查看完整回答
反对 回复 2022-10-25
  • 2 回答
  • 0 关注
  • 101 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号