您的位置:首页技术文章
文章详情页

Python两个list互换,两种不同的操作结果有差异,原因是什么呢?

浏览:74日期:2022-06-30 10:15:28

问题描述

a=[1,1,1,1,1,1,1,1,1]b=[0,0,0,0,0,0,0,0,0]c=[1,1,1,1,1,0,0,0,0]def xor(a,b): for i in range(len(a)):a[i]=a[i]^b[i] return a;

第一种操作是这样的,和预期不太相符:

b=xor(a,c)b,a=a,b

a=[0, 0, 0, 0, 0, 1, 1, 1, 1] | b=[0, 0, 0, 0, 0, 1, 1, 1, 1]

第二种加入一个中间值来暂时存储list b ,结果是这样的:

mid=bb=xor(a,c)a=mid

a=[0, 0, 0, 0, 0, 0, 0, 0, 0] | b=[0, 0, 0, 0, 0, 1, 1, 1, 1]

问题解答

回答1:

其实不太明白你说得'结果有差异'是指什么, 你这个输出不是很正常的么?xor(a,c), 将列表a的每个元素, 和列表c的每个元素取异或结果, 导致列表变成结果a变成[0, 0, 0, 0, 0, 1, 1, 1, 1]xor函数在修改列表a的同时, 还顺带return了一个列表a并且赋值给b, 这样子 b和a不是同一样的列表么?

而你下面的'中间变量', 只是存了b之前的值而已, 如果你想说用第一种方法达到第二种方法的效果, 那你可以不要赋值给b, 直接替换

xor(a,c)b,a=a,bprint a, b回答2:

第一种,是把b值改变,再a,b交换第二种,定义一个新值mid,再改变b值,再把mid赋值给a

这结果是对的,有什么问题?

回答3:

def xor(a,b): for i in range(len(a)):a[i]=a[i]^b[i] return a;

这个函数,实质就是返回了 a,中间可能有修改, 然后

print id(a)print id(b)b=xor(a,c) # <-- 就是 b==aprint id(a) == id(b) # <-- 调换之后应该相等了b,a=a,b # <-- 这里两个都是指向同一个东西了

如果只是两个互换:

a, b = b, a # <-- 这样就好了

标签: Python 编程