我开始使用python,我尝试使用一个二维列表,我开始在每个地方都用相同的变量填充。我想到了这个:

def initialize_twodlist(foo):
    twod_list = []
    new = []
    for i in range (0, 10):
        for j in range (0, 10):
            new.append(foo)
        twod_list.append(new)
        new = []

它给出了预期的结果,但感觉像是一种变通方法。有更简单/更短/更优雅的方法吗?


当前回答

我经常使用这种方法初始化2维数组

N =[[int(x) for x in input().split()] for I in range(int(input())]

其他回答

你可以使用列表推导式:

x = [[foo for i in range(10)] for j in range(10)]
# x is now a 10x10 array of 'foo' (which can depend on i and j if you want)

这是我发现的教新程序员最好的方法,而且不需要使用额外的库。不过我想要更好的。

def initialize_twodlist(value):
    list=[]
    for row in range(10):
        list.append([value]*10)
    return list
t = [ [0]*10 for i in [0]*10]

对于每个元素将创建一个新的[0]*10。

要初始化一个2维数组,使用: Arr = [[]*m for I in range(n)]

实际上, arr = [[]*m]*n将创建一个2D数组,其中所有n个数组都指向同一个数组,因此任何元素的任何值变化都将反映在所有n个列表中

更多详细解释请访问:https://www.geeksforgeeks.org/python-using-2d-arrays-lists-the-right-way/

对于那些困惑为什么[["]*m]*n不好用的人。

最好的方法是[[" for i in range(columns)] for j in range(rows)] 这将解决所有问题。

如需进一步澄清 例子:

>>> x = [['']*3]*3
[['', '', ''], ['', '', ''], ['', '', '']]
>>> x[0][0] = 1
>>> print(x)
[[1, '', ''], [1, '', ''], [1, '', '']]
>>> y = [['' for i in range(3)] for j in range(3)]
[['', '', ''], ['', '', ''], ['', '', '']]
>>> y[0][0]=1
>>> print(y)
[[1, '', ''], ['', '', ''], ['', '', '']]