聊聊Python中關於a=[[]]*3的反思
Python 關於a=[[]]*3的反思
之前用python做瞭一個關於交通大數據的項目,由於之前比較趕進度,故現在會陸續更新對項目代碼的一些反思。
1、
由此可以看出,a[0],a[1],a[2]指向的是同一個元素,[[]]*3表示在a中開辟三份地址,且地址相同。
2、
重新對a[0]賦值,故a[0]地址改變
3、
對a[0][0]賦值,即改變a[0],a[1],a[2]指向的地址裡的內容
註: .append\+=\-=等都不會重新賦地址,=會重新賦地址 故而,下面兩條語句都會出現問題:
在上述278、280兩行的語句中,我都用到瞭[[]]*len(spts),所以隻要其中某一個[]之後有.append或+=或其它不重新指向地址的行為,另外兩個元素也會跟著改變。
Python a, b = b, a +b [Python3常見問題]
閱讀文檔發現的。
>>> # Fibonacci series: ... # the sum of two elements defines the next ... a, b = 0, 1 >>> while b < 10: ... print(b) ... a, b = b, a+b ... 1 1 2 3 5 8
他實際上就是:
c = a + b a = b b = c
其他應用
1. 交換
a, b = 0, 1 a, b = b, a
評價:省去瞭temp中間變量
2. 斐波那契
>>> a, b = 0, 1 >>> while b < 1000: ... print(b, end=',') ... a, b = b, a+b ... 1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,
評價:比起數組的,遞歸的,確實簡潔
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- Python實現對相同數據分箱的小技巧分享
- Python數據結構與算法之算法分析詳解
- python實現希爾密碼加密的示例代碼
- Python數據分析 Pandas Series對象操作
- python小球落地問題及解決(遞歸函數)