這里的第一個問題,所以放輕松。
我試圖在二進制字串的大輸入的每個索引位置分配一個表示 1 和 0 累加器的物件串列,例如:011011101。
我想讀取輸入的第一行以獲取二進制字串的長度,然后分配一個看起來像 -> "[ {0:0, 1:0} ] * len(n)" 的變數為簡潔起見,我知道所有行的長度都是 12。
我的目標:回圈遍歷一行中的每個專案,并將 1 添加到該索引位置的物件鍵處的 1 或 0。-> “arr[i][v] = 1”
i 代表字串索引和我想在動態大小的陣列中訪問的物件
v 表示 i 位置的物件的鍵(0 或 1),我想增加 1
通過這種方式,我可以計算出給定輸入的每個位置有多少個 1 或 0。
簡化代碼:` input = ["010101101100", "110001101101"] arr = [{ 0:0,1:0 }] * len(input[0])
對于輸入中的行:對于 i, v in enumerate(row): v = int(v) arr[i][v] = 1 print(arr) `
結果錯誤!
但是,如果我這樣明確地設定串列:
input = ["010101101100", "110001101101"]
arr = [
{ 0:0,1:0 },
{ 0:0,1:0 },
{ 0:0,1:0 },
{ 0:0,1:0 },
{ 0:0,1:0 },
{ 0:0,1:0 },
{ 0:0,1:0 },
{ 0:0,1:0 },
{ 0:0,1:0 },
{ 0:0,1:0 },
{ 0:0,1:0 },
{ 0:0,1:0 }
]
for i, v in enumerate(input):
v = int(v)
arr[i][v] = 1
print(arr)
正確答案!
這里到底發生了什么?為什么訪問動態串列的回圈將加法應用于每個物件和相應的鍵值對?
我確定這是我沒有得到的一些計算機科學知識。
這有點不讓我頭暈目眩的唯一原因是我可以看到輸入,我可以明確設定串列,但如果長度未知,這將是一個問題
uj5u.com熱心網友回復:
當你使用 時*,Python 會創建一個串列,其中每個元素都參考同一個物件。因此,修改一個元素最終會修改所有元素。
arr = [{0:0, 1:0}] * 12 # this creates a list where every element is the same dictionary
arr = [{0:0, 1:0} for _ in range(12)] # this creates a list containing 12 independent dictionaries
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/436887.html
下一篇:將字典串列變成單個字典
