[英]How to fix the list of output from for-loop always store the last value of last index in python
我嘗試從存儲數據的名為 date_range 的數據列表中存儲周數,例如
date_range[1] = DatetimeIndex(['2020-03-02', '2020-03-03', '2020-03-04', '2020-03-05', '2020-03-06', '2020-03-07', '2020-03-08', '2020-03-09', '2020-03-10', '2020-03-11', '2020-03-12', '2020-03-13', '2020-03-14', '2020-03-15', '2020-03-16', '2020-03-17', '2020-03-18', '2020-03-19', '2020-03-20', '2020-03-21', '2020-03-22', '2020-03-23', '2020-03-24', '2020-03-25', '2020-03-26', '2020-03-27', '2020-03-28', '2020-03-29', '2020-03-30', '2020-03-31', '2020-04-01', '2020-04-02', '2020-04-03', '2020-04-04', '2020-04-05'], dtype='datetime64[ns]', freq='D')
通過使用以下代碼
weeknumber = [[0]*35]*2
for i in range(28):
for j in range(35)):
weeknumber[i][j]= pd.Timestamp(date_range[i][j]).weekofyear
然而,所有 28 行的結果存儲pd.Timestamp(date_range[28]).weekofyear
這樣的最后一個結果 那么,如何修復它。
0
是一個int
對象(在 Python 中,一切都是對象,記住)。 我們稱這個int
對象為“ZERO_OBJECT”。[0]
是具有一個元素的列表對象,該元素是對“ZERO_OBJECT”的引用。 讓我們稱這個列表對象為“LIST_1”[0]*35
創建另一個列表對象,包含對同一個“ZERO_OBJECT”的35
引用。 (這就是*
運算符在 Python 中的工作方式)。 讓我們稱這個新的列表對象為“LIST_2”[[0]*35]
是另一個具有一個元素的列表對象,該元素是對上述對象“LIST_2”的引用。 讓我們稱這個新的列表對象為“LIST_3”[[0]*35]*28
創建另一個列表對象,由28
元素組成,但是這28
元素中的每一個都是對同一對象“LIST_3”的引用。 正如我上面所說,這就是*
運算符的工作方式。 (並且您認為這28
元素是對“LIST_3”獨立副本的引用)。 這絕對不是你想要的。 因為,當您更新對“LIST_3”的一個引用時,您會看到它通過對“LIST_3”的所有其他引用反映出來。要解決此問題,請使用以下代碼:
weeknumber = []
for i in range(28):
weeknumber.append([])
for j in range(35)):
weeknumber[i].append(pd.Timestamp(date_range[i][j]).weekofyear)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.