2D列表生成Python

2D列表生成Python,python,list,loops,Python,List,Loops,我知道,要在Python中生成列表,可以使用以下方法: l = [i**2 for i in range(5)] 而不是像以下那样使用for循环: l = [] for i in range(5): l.append(i**5) 有没有一种方法可以在不使用for循环的情况下创建二维列表,如下所示: map = [[]] for x in range(10): row = [] for y in range(10): row.append((x+y)*

我知道,要在Python中生成列表,可以使用以下方法:

l = [i**2 for i in range(5)]
而不是像以下那样使用for循环:

l = []
for i in range(5):
    l.append(i**5)
有没有一种方法可以在不使用for循环的情况下创建二维列表,如下所示:

map = [[]]

for x in range(10):
    row = []
    for y in range(10):
        row.append((x+y)**2)
    map.append(row)

在Python中表示2D数组还有其他选择吗?

在这里也使用列表理解:

>>> [ [(x+y)**2 for y in range(10)] for x in range(10)]
[[0, 1, 4, 9, 16, 25, 36, 49, 64, 81], [1, 4, 9, 16, 25, 36, 49, 64, 81, 100], [4, 9, 16, 25, 36, 49, 64, 81, 100, 121], [9, 16, 25, 36, 49, 64, 81, 100, 121, 144], [16, 25, 36, 49, 64, 81, 100, 121, 144, 169], [25, 36, 49, 64, 81, 100, 121, 144, 169, 196], [36, 49, 64, 81, 100, 121, 144, 169, 196, 225], [49, 64, 81, 100, 121, 144, 169, 196, 225, 256], [64, 81, 100, 121, 144, 169, 196, 225, 256, 289], [81, 100, 121, 144, 169, 196, 225, 256, 289, 324]]

您也可以考虑使用Python的科学计算包来实现N-D数组。与嵌套列表相比,Numpy数组对象具有一些优势:

  • 例如,n-d阵列切片(取自):

  • 使用转置、重塑和调整大小等方法轻松操作n-d阵列

  • 在阵列上轻松实现数学运算


当然,这可能比您实际需要的更多,因此嵌套列表理解对于您的目的来说就足够了。

更有效的方法是使用numpy.meshgrid()。这里有一个例子:

i = np.arange(1,10)
I,J = np.meshgrid(i,i)
array = (I+J)**2
数组具有所需的形式

您可以比较您的方法和meshgrid之间的性能。Meshgrid是C语言实现的,所以速度非常快

如果需要数组中的列表,可以使用array.tolist()方法

i = np.arange(1,10)
I,J = np.meshgrid(i,i)
array = (I+J)**2