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

Poser une question sur un problème d'affectation de liste en Python

Pourquoi

s = [1, 2, 3, 4, 5, 6]
i = 0
i = s[i] = 3
Le résultat est : [1, 2, 3, 3, 5, 6] et pas [3, 2, 3, 4, 5, 6]

女神的闺蜜爱上我女神的闺蜜爱上我2686 Il y a quelques jours956

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

  • PHP中文网

    PHP中文网2017-06-12 09:26:18

    Vous pouvez vous référer à un article que j'ai écrit ci-dessous : Python : Les pièges de l'affectation chaînée

    répondre
    0
  • 扔个三星炸死你

    扔个三星炸死你2017-06-12 09:26:18

    Selon les déclarations d'affectation :

    a = b = c = d = ... = E

    équivaut à

    a = E
    b = E
    c = E
    d = E
    ...

    Donc : i=s[i]=3 équivaut à :

    i = 3
    s[i] = 3

    La affectation en Python est une instruction, pas un opérateur, donc l'expression (a=b) produira une erreur de syntaxe, et l'instruction affectation n'a aucune valeur.

    répondre
    0
  • 怪我咯

    怪我咯2017-06-12 09:26:18

    Référence https://stackoverflow.com/que...

    équivaut à

    s = [1, 2, 3, 4, 5, 6]
    i = 0
    temp_value = 3
    i = temp_value
    s[i] = temp_value
    

    D'abord, i devient 3, puis la valeur s[i] est attribuée

    répondre
    0
  • 滿天的星座

    滿天的星座2017-06-12 09:26:18

    En regardant les résultats, i=3 a été exécuté avant s[i] = 3.

    Ne peux-tu pas simplement l'écrire en deux phrases distinctes ?

    répondre
    0
  • 仅有的幸福

    仅有的幸福2017-06-12 09:26:18

    Vous pouvez utiliser PythonTutor.com
    i = s[i] = 3 Cette ligne exécute essentiellement i=3 et s[i]=3 successivement

    répondre
    0
  • typecho

    typecho2017-06-12 09:26:18

    i = s[i] = 3 等价于 i = 3; s[i] = 3

    Utilisez le module dis pour analyser le processus d'exécution :

    >>> def f():
        s = [1, 2, 3, 4, 5, 6]
        i = 0
        i = s[i] = 3
    
        
    >>> import dis
    >>> dis.dis(f)
      2           0 LOAD_CONST               1 (1)
                  3 LOAD_CONST               2 (2)
                  6 LOAD_CONST               3 (3)
                  9 LOAD_CONST               4 (4)
                 12 LOAD_CONST               5 (5)
                 15 LOAD_CONST               6 (6)
                 18 BUILD_LIST               6
                 21 STORE_FAST               0 (s) # s = [1, 2, 3, 4, 5, 6]
    
      3          24 LOAD_CONST               7 (0)
                 27 STORE_FAST               1 (i) # i = 0
    
      4          30 LOAD_CONST               3 (3) # 常量3 入栈
                 33 DUP_TOP                        # 复制栈顶,也就是 常量3
                 34 STORE_FAST               1 (i) # i = 3
                 37 LOAD_FAST                0 (s)
                 40 LOAD_FAST                1 (i)
                 43 STORE_SUBSCR                   # s[i] = 3
                 44 LOAD_CONST               0 (None) # 返回 None
                 47 RETURN_VALUE

    Exemple d'écriture séparée

    >>> def f2():
        s = [1, 2, 3, 4, 5, 6]
        i = 0
        i = 3
        s[i] = 3
    
        
    >>> dis.dis(f2)
      2           0 LOAD_CONST               1 (1)
                  3 LOAD_CONST               2 (2)
                  6 LOAD_CONST               3 (3)
                  9 LOAD_CONST               4 (4)
                 12 LOAD_CONST               5 (5)
                 15 LOAD_CONST               6 (6)
                 18 BUILD_LIST               6
                 21 STORE_FAST               0 (s) # s = [1, 2, 3, 4, 5, 6]
    
      3          24 LOAD_CONST               7 (0)
                 27 STORE_FAST               1 (i) # i = 0
    
      4          30 LOAD_CONST               3 (3)
                 33 STORE_FAST               1 (i) # i = 3
    
      5          36 LOAD_CONST               3 (3)
                 39 LOAD_FAST                0 (s)
                 42 LOAD_FAST                1 (i)
                 45 STORE_SUBSCR                   # s[i] = 3
                 46 LOAD_CONST               0 (None)
                 49 RETURN_VALUE
    >>> 

    répondre
    0
  • Annulerrépondre