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] |
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.
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?.
Intipati fungsi ini adalah untuk mengembalikan a, mungkin terdapat pengubahsuaian di tengah, dan kemudian
Jika terdapat dua swap sahaja: