簡體   English   中英

如何在python中創建嵌套列表?

[英]How to create nested lists in 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)) 

您還可以享受為科學計算而構建的模塊的便利功能。

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維數組可能是更好的方法嗎?
雖然您可以使用列表來實現多維矩陣,但我認為它們不是實現該目標的最佳工具。

或者使用此處定義的嵌套函數,結合itertools模塊中的repeat(0):

nest(itertools.repeat(0),[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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM