Maison > Questions et réponses > le corps du texte
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;
La première opération se déroule ainsi, ce qui n'est pas tout à fait conforme aux attentes :
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]
La deuxième méthode consiste à ajouter une valeur intermédiaire pour stocker temporairement la liste b. Le résultat est le suivant :
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]
淡淡烟草味2017-05-24 11:37:35
En fait, je ne comprends pas très bien ce que vous entendez par « différence dans les résultats ». Votre sortie n'est-elle pas très normale ? xor(a,c)
, 将列表a的每个元素, 和列表c的每个元素取异或结果, 导致列表变成结果a变成[0, 0, 0, 0, 0, 1, 1, 1, 1]
Lors de la modification de la liste a, la fonction xor renvoie également une liste a et l'attribue à b. de cette façon, b et a ne sont-ils pas la même liste
La "variable intermédiaire" ci-dessous stocke simplement la valeur précédente de b. Si vous souhaitez utiliser la première méthode pour obtenir l'effet de la deuxième méthode, vous pouvez la remplacer directement au lieu de l'attribuer à b
.xor(a,c)
b,a=a,b
print a, b
大家讲道理2017-05-24 11:37:35
La première méthode consiste à changer la valeur de b, puis à échanger a et b. La deuxième méthode consiste à définir une nouvelle valeur mid, puis à modifier la valeur de b, puis à attribuer mid à a
.
伊谢尔伦2017-05-24 11:37:35
def xor(a,b):
for i in range(len(a)):
a[i]=a[i]^b[i]
return a;
L'essence de cette fonction est de renvoyer a, il peut y avoir des modifications au milieu, et puis
print id(a)
print id(b)
b=xor(a,c) # <-- 就是 b==a
print id(a) == id(b) # <-- 调换之后应该相等了
b,a=a,b # <-- 这里两个都是指向同一个东西了
S'il n'y a que deux échanges :
a, b = b, a # <-- 这样就好了