Python兩個list互換,兩種不同的操作結果有差異,原因是什麼呢?
仅有的幸福
仅有的幸福 2017-05-24 11:35:35
0
3
717
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;

第一種運算是這樣的,和預期不太相符:

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]

第二種加入一個中間值來暫時儲存list b ,結果是這樣的:

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]

仅有的幸福
仅有的幸福

全部回覆(3)
淡淡烟草味

其實不太明白你說得"結果有差異"是指什麼, 你這個輸出不是很正常的麼?
xor(a,c), 将列表a的每个元素, 和列表c的每个元素取异或结果, 导致列表变成结果a变成[0, 0, 0, 0, 0, 1, 1, 1, 1]
xor函數在修改列表a的同時, 還順帶return了一個列表a並且賦值給b,這樣子b和a不是同一樣的列表麼?

而你下面的"中間變數", 只是存了b之前的值而已, 如果你想說用第一種方法達到第二種方法的效果, 那你可以不要賦值給b, 直接替換

xor(a,c)
b,a=a,b
print a, b
大家讲道理

第一種,是把b值改變,再a,b交換
第二種,定義一個新值mid,再改變b值,再把mid賦值給a

這結果是對的,有什麼問題?

伊谢尔伦
def xor(a,b):
    for i in range(len(a)):
        a[i]=a[i]^b[i]
    return a;

這個函數,實質就是回傳了 a,中間可能有修改, 然後

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

如果只是兩個互換:

a, b = b, a  # <-- 这样就好了
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!