我想將串列元素作為第一行和第一行存盤在 python 的矩陣中
myLIST=[41,32,49,4,55]
之后我想創建一個大小為 =(m,n) 的矩陣,其中 m 和 n = (myLIST) 的長度;這樣:
myMATRIX=[ [41,32,49,4,55], [32,0,0,0,0] ,[49,0,0,0,0], [4,0,0,0,0], [55,0,0,0,0] ]
uj5u.com熱心網友回復:
您可以使用串列理解:
lst = [41,32,49,4,55]
n = len(lst)
output = [[lst[max(i, j)] if i * j == 0 else 0 for j in range(n)] for i in range(n)]
print(output)
# [[41, 32, 49, 4, 55], [32, 0, 0, 0, 0], [49, 0, 0, 0, 0], [4, 0, 0, 0, 0], [55, 0, 0, 0, 0]]
通常這種模式for ... in range(len(...))很難看,但在這種情況下,我發現它比使用for ... in enumerate(...).
lst請注意,我們是從何時且僅在 時賦值i * j == 0,即在第一行或第一列;這是由... if ... else ....
uj5u.com熱心網友回復:
串列推導可能非常有用,但有時它們變得如此復雜/不可讀,以至于 IMO 最好使用for回圈,以便在可能的效率成本下保持清晰。永遠不要忘記,其他人有一天可能需要修改您的代碼,他們可能會花費大量時間來解開您的串列/字典/集合理解。
話雖如此,您可以這樣做:
myLIST = [41, 32, 49, 4, 55]
myMATRIX = [myLIST] [[e] [0] * (len(myLIST)-1) for e in myLIST[1:]]
print(myMATRIX)
輸出:
[[41, 32, 49, 4, 55], [32, 0, 0, 0, 0], [49, 0, 0, 0, 0], [4, 0, 0, 0, 0], [55, 0, 0, 0, 0]]
uj5u.com熱心網友回復:
僅使用串列推導
這是您可以使用enumerate. 邏輯如下——
- 使用 enumerate 遍歷 myLIST 的每個元素以獲取它們的索引位置。
- 如果位置大于第 0 個索引,則回傳特定元素以及 0 串列
- 否則,當 index 為 0 時回傳完整串列。
[[myLIST[i]] ([0]*(len(myLIST)-1)) if i>0 else myLIST for i,j in enumerate(myLIST)]
[[41, 32, 49, 4, 55],
[32, 0, 0, 0, 0],
[49, 0, 0, 0, 0],
[4, 0, 0, 0, 0],
[55, 0, 0, 0, 0]]
由于您的目標是掌握串列理解,因此我會推薦以下指南,這些指南在很久以前就很有用-
- https://www.programiz.com/python-programming/list-comprehension
- https://www.analyticsvidhya.com/blog/2021/06/10-examples-you-should-try-to-master-list-comprehensions-in-python/
結合使用 numpy 和串列??理解
為了完整起見,您也可以使用stride_tricksor純粹在 numpy 中執行此操作np.roll。
檢查這個 -獨立滾動矩陣的行
另一種方法是np.roll在索引上使用三元運算子條件和串列理解的組合 -
- 使用將 myLIST 轉換為對角矩陣
np.diag(myLIST)
array([[41, 0, 0, 0, 0],
[ 0, 32, 0, 0, 0],
[ 0, 0, 49, 0, 0],
[ 0, 0, 0, 4, 0],
[ 0, 0, 0, 0, 55]])
接下來,您可以
np.roll通過索引號 * -1 獨立地在陣列中的每一行。因此,對于[ 0, 0, 49, 0, 0],-2 滾動將導致[ 49, 0, 0, 0, 0]設定一個條件來滾動所有索引> 0的東西,當索引為0時,只需回傳原始陣列。
這是作為串列理解的完整代碼 -
import numpy
arr = np.diag(myLIST)
[list(np.roll(j,-1*i)) if i>0 else myLIST for i,j in enumerate(arr)]
[[41, 32, 49, 4, 55],
[32, 0, 0, 0, 0],
[49, 0, 0, 0, 0],
[4, 0, 0, 0, 0],
[55, 0, 0, 0, 0]]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/441574.html
下一篇:JSON轉換成PHP陣列
