我知道你可以在Python輕鬆地創建嵌套的列表是這樣的:如何在python中創建嵌套列表?
[[1,2],[3,4]]
但如何創建零的3x3x3的矩陣?
[[[0] * 3 for i in range(0, 3)] for j in range (0,3)]
或
[[[0]*3]*3]*3
看起來不正確。沒有辦法創建它只是將維度列表傳遞給方法?例如:
CreateArray([3,3,3])
我知道你可以在Python輕鬆地創建嵌套的列表是這樣的:如何在python中創建嵌套列表?
[[1,2],[3,4]]
但如何創建零的3x3x3的矩陣?
[[[0] * 3 for i in range(0, 3)] for j in range (0,3)]
或
[[[0]*3]*3]*3
看起來不正確。沒有辦法創建它只是將維度列表傳遞給方法?例如:
CreateArray([3,3,3])
萬一一個矩陣實際上是你正在尋找的,考慮numpy包。
http://docs.scipy.org/doc/numpy/reference/generated/numpy.zeros.html#numpy.zeros
這會給你零的3x3x3的數組:
numpy.zeros((3,3,3))
也從科學計算構建模塊的便利功能中獲益。
就窩乘法語法:
[[[0] * 3] * 3] * 3
這是因此簡單的表達使用
def zeros(dimensions):
return reduce(lambda x, d: [x] * d, [0] + dimensions)
或者,如果你想避免引用複製這種操作,所以改變一個項目不會影響任何其他你應該使用副本:
import copy
def zeros(dimensions):
item = 0
for dimension in dimensions:
item = map(copy.copy, [item] * dimension)
return item
請允許我編輯 – 2010-01-31 20:17:38
@Jader迪亞斯:阿門 – Dario 2010-01-31 20:33:27
現在使用的地圖! – 2010-01-31 20:39:44
NumPy的解決了這個問題
http://www.scipy.org/Tentative_NumPy_Tutorial#head-d3f8e5fe9b903f3c3b2a5c0dfceb60d71602cf93
>>> a = array([2,3,4])
>>> a
array([2, 3, 4])
>>> type(a)
<type 'numpy.ndarray'>
但是如果你想使用Python本地列表作爲基質以下輔助方法可以派上用場:
import copy
def Create(dimensions, item):
for dimension in dimensions:
item = map(copy.copy, [item] * dimension)
return item
def Get(matrix, position):
for index in position:
matrix = matrix[index]
return matrix
def Set(matrix, position, value):
for index in position[:-1]:
matrix = matrix[index]
matrix[position[-1]] = value
列表解析只是用於增加表達式對列表初始化的語法糖;在你的情況下,我根本不會使用它們,並進行一個簡單的嵌套循環。
完全不同的水平:你認爲NumPy的n-dimensional array可能是一個更好的方法?
儘管您可以使用列表來實現多維矩陣,但我認爲它們並不是實現該目標的最佳工具。
或者使用定義here巢功能,從itertools模塊裏重複(0)合併:
nest(itertools.repeat(0),[3,3,3])
這不起作用。它應該是numpy.zeros((3,3,3)) – 2010-01-31 20:13:18
@ Cytokine更正 – 2010-01-31 20:19:02
哈,我發誓當我輸入它時,元組在那裏......謝謝Jader! – 2010-01-31 20:30:26