Rumah  >  Soal Jawab  >  teks badan

Apabila dua senarai Python ditukar, keputusan dua operasi berbeza adalah berbeza.

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;

Operasi pertama macam ni, yang tak berapa kena dengan jangkaan:

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

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

Kaedah kedua ialah menambah nilai perantaraan untuk menyimpan senarai sementara b. Hasilnya adalah seperti ini:

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

a=[0, 0, 0, 0, 0, 0, 0, 0, 0] |
仅有的幸福仅有的幸福2705 hari yang lalu707

membalas semua(3)saya akan balas

  • 淡淡烟草味

    淡淡烟草味2017-05-24 11:37:35

    Sebenarnya, saya tidak begitu memahami apa yang anda maksudkan dengan "perbezaan dalam hasil". dengan cara ini, bukankah
    b dan senarai yang sama xor(a,c), 将列表a的每个元素, 和列表c的每个元素取异或结果, 导致列表变成结果a变成[0, 0, 0, 0, 0, 1, 1, 1, 1]
    "Pembolehubah perantaraan" di bawah hanya menyimpan nilai b sebelumnya Jika anda ingin menggunakan kaedah pertama untuk mencapai kesan kaedah kedua, maka anda boleh menggantikannya secara langsung dan bukannya menetapkannya kepada b.

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

    balas
    0
  • 大家讲道理

    大家讲道理2017-05-24 11:37:35

    Kaedah pertama ialah menukar nilai b, dan kemudian menukar a dan b Kaedah kedua ialah mentakrifkan nilai baru pertengahan, kemudian menukar nilai b, dan kemudian menetapkan pertengahan kepada a
    .

    Hasil ini betul, apa masalahnya?

    balas
    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;

    Intipati fungsi ini adalah untuk mengembalikan a, mungkin terdapat pengubahsuaian di tengah, dan kemudian

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

    Jika terdapat dua swap sahaja:

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

    balas
    0
  • Batalbalas