usage of the append function of list in python -
class solution: # @param num, list of integer # @return list of lists of integers def permute(self, num): self.res = []; self.dfs(num, 0) return self.res def dfs(self, num, level): if level == len(num): self.res.append(num) print(num) return in range(level, len(num)): num[i], num[level] = num[level], num[i] self.dfs(num, level+1) num[i], num[level] = num[level], num[i] the above code used generate permutations given collection of numbers. example, num = [1, 3] result be: [1 3], [3, 1]
but there bug above code don't understand, self.res.append(num). if change self.res.append(num[:]), code correct. can explain why?
using self.res.append(num), result is:
[1, 3], [1, 3]
using self.res.append(num[:]), result is:
[1, 3], [3, 1]
the elements of python list references other objects. when append using self.res.append(num), list grown 1 element, , last element set refer object pointed num.
now in first case, there 2 references same list object. self.res[0] , self.res[1] refer same object, changes performed through either visible through other.
in second case, using num[:], [:] operator makes new list copy of original.
for general algorithm creating permutations of given collection of elements, use itertools.permutations:
>>> itertools import permutations >>> print(list(permutations([1, 3]))) [(1, 3), (3, 1)]
Comments
Post a Comment