Wenn zwei Python-Listen ausgetauscht werden, sind die Ergebnisse der beiden verschiedenen Operationen unterschiedlich. Was ist der Grund?
仅有的幸福
仅有的幸福 2017-05-24 11:35:35
0
3
738
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;

Die erste Operation läuft so ab, was nicht ganz den Erwartungen entspricht:

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]

Die zweite Methode besteht darin, einen Zwischenwert zur vorübergehenden Speicherung von Liste b hinzuzufügen. Das Ergebnis sieht folgendermaßen aus:

mid=b
b=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]

仅有的幸福
仅有的幸福

Antworte allen(3)
淡淡烟草味

其实不太明白你说得"结果有差异"是指什么, 你这个输出不是很正常的么?
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,b
print a, b
大家讲道理

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

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

伊谢尔伦
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==a
print id(a) == id(b)  # <-- 调换之后应该相等了
b,a=a,b  # <-- 这里两个都是指向同一个东西了 

如果只是两个互换:

a, b = b, a  # <-- 这样就好了
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage