亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 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 關注
  • 121 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號