下面的代碼給出了數組的所有排列,我想寫一個函數,可以一次使用一個排列(我想處理在不產生它們全部提前,爲了能夠在目標函數使用它時,例如[2,3,5,4,1,6]一個置換)如何寫一個函數來獲取一次一個數組中的pym對象
s = np.array([1, 2, 3, 4, 5, 6])
from itertools import permutations
for s_temp in permutations(s):
print (s_temp)
下面的代碼給出了數組的所有排列,我想寫一個函數,可以一次使用一個排列(我想處理在不產生它們全部提前,爲了能夠在目標函數使用它時,例如[2,3,5,4,1,6]一個置換)如何寫一個函數來獲取一次一個數組中的pym對象
s = np.array([1, 2, 3, 4, 5, 6])
from itertools import permutations
for s_temp in permutations(s):
print (s_temp)
你有幾個posibilities,首先permutations
返回一個迭代器,這樣您的代碼就可以通過更改print
來適應需要調用的任何內容。
from itertools import permutations
def process(s):
for s_temp in permutations(s):
call_your_stuff(s_temp)
而且一旦你有排列對象,你可以得到它的調用next
的下一個項目:
from itertools import permutations
s = permutations(range(3))
s
<itertools.permutations object at 0x000000000377CFC0>
next(s)
(0, 1, 2)
如果要處理每個你可以使用map
的排列相同的功能,只需更換該示例中的lambda
功能無論你需要調用:
s = permutations(range(3))
map(lambda (x, y, z): x+y-z, s)
[-1, 1, -1, 3, 1, 3]
可以收集數據轉換成用於進一步處理列表:
s = list(permutations(range(3)))
s
[(0, 1, 2), (0, 2, 1), (1, 0, 2), (1, 2, 0), (2, 0, 1), (2, 1, 0)]
請注意,如果你不一旦你消耗的置換對象的迭代器,數據將被「丟失」收集的數據(成一個列表,元組等),(你將有再次重新計算)
謝謝!欣賞它,這有助於 –
'permutations(s)'是一個迭代器,因此您可以一次處理「一次一個置換」而不提前全部生成它們,這不是您想要的嗎? –
你在正確的軌道上,但沒有更多的上下文,不可能告訴你該做什麼。 –
打印每次消耗一個排列?你可以用任何作用於一個排列的函數代替print。 – Quickbeam2k1