recherche

Maison  >  Questions et réponses  >  le corps du texte

Lorsque deux listes Python sont échangées, les résultats des deux opérations différentes sont différents. Quelle en est la raison ?

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]

仅有的幸福仅有的幸福2814 Il y a quelques jours764

répondre à tous(3)je répondrai

  • 淡淡烟草味

    淡淡烟草味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

    répondre
    0
  • 大家讲道理

    大家讲道理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
    .

    Ce résultat est correct, quel est le problème ?

    répondre
    0
  • 伊谢尔伦

    伊谢尔伦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  # <-- 这样就好了

    répondre
    0
  • Annulerrépondre