我試圖將串列的所有可能排列,候選者,附加到名為 res 的串列中。串列 res 應該是 [[1,1]。[1,2]、[2,1]、[2,2]]。但它只回傳 [[], [], [],[]]。我試圖運行除錯器。原來,當它彈出curr的元素時,也會彈出res的子串列。(我可以使用 res.append(curr.copy()) 修復它)但我不知道為什么會發生這種情況。有人可以向我解釋一下嗎?先感謝您。
candidates = [1, 2]
res = []
def backtracking(curr):
if len(curr) == len(candidates):
res.append(curr)
return
else:
for i in range(len(candidates)):
curr.append(candidates[i])
backtracking(curr)
curr.pop()
backtracking([])
print(res)
uj5u.com熱心網友回復:
你在做什么被稱為笛卡爾積。
排列的[1, 2]是[(1, 2), (2, 1)],但不是(1, 1)或(2, 2)。
組合的[1, 2]是[(1, 1), (1, 2), (2, 2)]; 關閉但失蹤(2, 1)。
您可以使用itertools.product()以下方法完成此操作:
import itertools
print(list(itertools.product([1,2], repeat=2)))
uj5u.com熱心網友回復:
Python 串列是(可變的)物件參考。因此,當您將串列分配給變數或將其作為引數傳遞時,所有變數都參考同一個物件實體。因此,所有參考都會看到任何更改(包括流行音樂)。該.copy()方法創建一個單獨的串列實體,并帶有其內容的副本。此副本獨立于原始副本,對其的更改不會反映到仍參考原始副本的其他變數中。此外,對原件的更改不會影響副本。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/334326.html
上一篇:元組串列的隨機抽樣
