如果我創建一個二維串列:
In [1]: foo = [[None]*10]*5
In [2]: foo
Out[2]:
[[None, None, None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None, None, None]]
In [3]: len(foo)
Out[3]: 5
我希望 foo 的第一個元素中的串列可以使用foo[0]or訪問foo[0][:]。因此它的長度是 10,正如預期的那樣:
In [4]: len(foo[0][:])
Out[4]: 10
type(foo[:][0])回傳“串列”。我希望這是一個由 foo 的每個“子串列”中的第 0 個元素構成的串列。因此它的長度應該是 5。但是,情況并非如此:
In [5]: len(foo[:][0])
Out[5]: 10
我在這里錯過了什么/我不明白什么?
uj5u.com熱心網友回復:
串列串列不是矩陣,它是……串列串列。
讓我們分解foo[:][0]:
foo是一個指向串列的名稱[:]是對指向的串列的第一次“下標訪問”foo。具體來說,您通過在沒有給出索引的情況下對其進行切片來獲取原始串列的副本[0]是對第一個結果的第二個“下標訪問”。
您正在訪問 foo 副本的第一個元素。
uj5u.com熱心網友回復:
嘗試將陣列轉換為 numpy,它的作業速度更快,并且在訪問元素時更方便。
import numpy as np
foo = np.array([[None]*10]*5)
print(foo.shape)
print(len(foo[0, :]))#10
print(len(foo[:, 0]))#5
uj5u.com熱心網友回復:
在串列代碼的源代碼中,List 是一個結構體,它有一個指向陣列空間的雙指標和一個 list 的長度。對于您的串列 foo[:][0],foo[:] 可以寫成 foo[ start:end],并且,如果您沒有設定 start 和 end 的值,它將自動設定-inf并且inf.So,foo[:] 擁有所有 sub_List.foo[:][0] 是您的 sub_List 之一。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/466063.html
上一篇:程式為:請輸入3位數字:635排列為:635、653、365、356、563、536
下一篇:將2個串列相乘
