1.
[False * 9] = [000...]
[False for _ in range(9)] = [False False False ....]
[False * 9]:结果是一个长度为1列表,值为一个字符串。
[False for _ in range(9)]:结果是一个长度为9的列表。
2.
nums = [-1,4,3,1] i=1 nums[i], nums[nums[i]-1] = nums[nums[i]-1], nums[i]
和
i=1
k = nums[i]-1
nums[i], nums[k] = nums[k], nums[i]
结果分别为[4,1,3,1],[-1,1,3,4]。
nums[1], nums[nums[1]-1] = nums[nums[1]-1], nums[1]的赋值流程:
1) 先右边计算nums[nums[1]-1], nums[1] = 1, 4。
2)将1赋值给左边的nums[1],此时nums=[-1,1,3,1]。
3)将4赋值给左边的num[nums[1]-1],但是此时的nums[1]不是4而是1,所以nums[nums[1]-1]=nums[0],所以此时4被赋值给nums[0]。
总结:对于我这样的小白,如果在python中需要进行交换的值在多层嵌套中(eg. nums[nums[nums[]]]),解决办法:
a)使用传统的三段式进行交换。
b)把包含嵌套的要交换的值放在前面,nums[1], nums[nums[1]-1] = nums[nums[1]-1], nums[1]是错误的值,但是 nums[nums[1]-1], nums[1] = nums[1],nums[nums[1]-1]值是对的。因为nums[nums[1]-1]中的nums[1]的值还没有改变。所以只要先计算嵌套中的值就行了。