我試過尋找這個問題的答案,並閱讀了很多關於裝飾器和全局變量,但還沒有發現任何與手頭問題完全相符的意義:我想讓N
的每個排列長度使用A
-alpha,fxn(A,N)
。我將通過函數2參數:A
和N
。它會產生長度爲N
的虛擬結果。然後,與N
嵌套for
循環它將更新結果的每個索引,每個元素A
從最內層循環開始。因此,與fxn(‘01’,4)
會產生如何在Python中產生嵌套循環
1111, 1110, 1101, 1100, 1011, 1010, 1001, 1000,
0111, 0110, 0101, 0100, 0011, 0010, 0001, 0000
這是簡單的做到這一點,如果你知道你有多少嵌套循環需要(N
;雖然超過4它開始帶來麻煩和繁瑣)。但是,如果要使用A來創建所有任意長度的序列,則需要一些方法來自動執行此循環行爲。特別是我還希望這個函數作爲一個生成器來防止必須將所有這些值存儲在內存中,比如列表。要啓動它,需要初始化第一個循環並通過單個值更改(要更新的索引)來保持初始化嵌套循環N-1
次。它會產生最內層循環的值。
直截了當的方式做fxn('01',4)
是:
for i in alphabet:
tempresult[0] = i
for i in alphabet:
tempresult[1] = i
for i in alphabet:
tempresult[2] = i
for i in alphabet:
tempresult[3] = i
yield tempresult
基本上,我這怎麼能擴展到任意長度列表或字符串,仍然可以得到每個窩循環更新相應的索引。我知道可能有一個排列功能作爲numpy的一部分,它可以做到這一點,但我一直沒有遇到過。任何意見,將不勝感激。
你想'itertools.permutations()',在標準庫中,或者更可能'itertools.product('01',repeat = 4)''。 –
其實,我不認爲'numpy'有一個簡單的方法來做到這一點。您可以使用遞歸函數,在每個遞歸步驟中結合'tile'和'repeat',但這看起來不是很簡單或高效。 – abarnert