Python 中數組和數字相乘時的注意事項說明
注意事項
[object] * n 的時候并沒有復制n-1個object,而是增加了n-1個對object的引用。
例子說明
目標:生成一個10*10且所有值都是0的二維數組
方法一:
[ [0] * 10] * 10
方法二:
[ [0 for _ in range(10)] for _ in range(10)]
本以為兩種方法得到的結果是一樣,但是在使用時發(fā)現有些不一樣。如下面的代碼所示。
當僅僅更改a[2][2]的值的時候,a[k][2] (k取0到9)全部被更改成了4。
其實這是因為[object] * n 的時候并沒有復制n-1個object,而是增加了n-1個引用。
a = [ [0] * 10] * 10 b = [ [0 for _ in range(10)] for _ in range(10)] a[2][2] = 4 b[2][2] = 4 for i in a: print(i) print("--------") for i in b: print(i) [0, 0, 4, 0, 0, 0, 0, 0, 0, 0] [0, 0, 4, 0, 0, 0, 0, 0, 0, 0] [0, 0, 4, 0, 0, 0, 0, 0, 0, 0] [0, 0, 4, 0, 0, 0, 0, 0, 0, 0] [0, 0, 4, 0, 0, 0, 0, 0, 0, 0] [0, 0, 4, 0, 0, 0, 0, 0, 0, 0] [0, 0, 4, 0, 0, 0, 0, 0, 0, 0] [0, 0, 4, 0, 0, 0, 0, 0, 0, 0] [0, 0, 4, 0, 0, 0, 0, 0, 0, 0] [0, 0, 4, 0, 0, 0, 0, 0, 0, 0] -------- [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [0, 0, 4, 0, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
補充:python 中numpy數組與數組使用*相乘的效果
輸入:
import numpy as np b = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]]) a = np.array([150,270,150,270]) b2 = b * a print(b) print(a) print(b2)
輸出:
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
[150 270 150 270]
[[ 150 540 450 1080]
[ 750 1620 1050 2160]
[1350 2700 1650 3240]]
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關文章
Django把SQLite數據庫轉換為Mysql數據庫的過程
之前我們默認使用的是SQLite數據庫,我們開發(fā)完成之后,里面有許多數據,如果我們想轉換成Mysql數據庫,那我們先得把舊數據從SQLite導出,然后再導入到新的Mysql數據庫里去,這篇文章主要介紹了Django如何把SQLite數據庫轉換為Mysql數據庫,需要的朋友可以參考下2023-05-05Python使用MySQLdb for Python操作數據庫教程
這篇文章主要介紹了Python使用MySQLdb for Python操作數據庫教程,詳細講述了MySQLdb的用法,針對Python操作MySQL數據庫程序設計具有很好的參考借鑒價值,需要的朋友可以參考下2014-10-10