0
下面的代碼返回提供的數字的所有可能的排列。遞歸中的python列表的行爲
class Solution:
def permute(self, numbers, start, result):
if start == len(numbers):
print(numbers)
result.append(numbers[:])
return
for i in range(start, len(numbers)):
numbers[start], numbers[i] = numbers[i], numbers[start]
self.permute(numbers, start + 1, result)
numbers[start], numbers[i] = numbers[i], numbers[start]
def solution(self, numbers):
result = []
if not numbers or len(numbers) == 0:
return numbers
self.permute(numbers, 0, result)
return result
res1 = Solution().solution([1, 2, 3])
print(res1)
此實例的最終輸出將是
[[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 2, 1], [3, 1, 2]]
但是當我稍微修改該置換功能,輸出的是完全不同的
def permute(self, numbers, start, result):
if start == len(numbers):
print(numbers)
result.append(numbers) #changing this line
return
for i in range(start, len(numbers)):
numbers[start], numbers[i] = numbers[i], numbers[start]
self.permute(numbers, start + 1, result)
numbers[start], numbers[i] = numbers[i], numbers[start]
這給輸出
[[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]
該項目工程,當我使用
result.append([x for x in numbers])
或
result.append(numbers[:])
但不是當我使用
result.append(numbers)
有人可以幫助我理解爲什麼這是怎麼回事?
作爲卡羅利·霍瓦斯的答案,當你做數字[:]它爲您創建一個新的數組。 – gipsy
供參考:'itertools.permutations'爲你工作:) – Orelus