从通过list comprehension创建的二维网格中获取列表列

2024-04-16 07:48:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我用列表理解创建了一个二维网格,它是列表中的列表,如下所示。在

self.grid = [[0 for col in range(self.width)]
                     for row in range(self.height)]

宽度和高度作为输入列表的列和行值。在

我将使用它作为2D数组,并希望通过一条语句按行和按列访问整个列表(元素)。在

对于上面显示的网格,我可以使用下面的一个简单的For循环遍历网格中的行,每次处理每一行。在

^{pr2}$

我现在可以直接在dummy_temp_line上应用所需的处理,它是list。在

但我面临的难题是如何才能做到同样的处理列明智。有什么方法可以让我在列表列中得到网格的元素吗。在

注意:宽度和高度的大小也会很谨慎,而且不会总是相同的。


Tags: inself网格元素列表for宽度高度
2条回答

转换整个网格的另一种解决方案是根据需要使用列表理解来生成单个列:

for column in range(self.width):
    dummy_temp_line = [self.grid[x][column] for x in range(self.height)]

您可以转置:

 data =  [[0 for col in range(self.width)]
                 for row in range(self.height)]


zipped = zip(*data)

演示:

^{pr2}$

如果要更新原始对象自身网格公司名称:

^{3}$

正如我在一篇评论中提到的,您可能会发现numpy很有用,您可以通过以下方式更改原始数组:

data = np.array([range(5) for row in range(5)])

for col in data.transpose():
    col *= 10
print(data)
[[ 0 10 20 30 40]
[ 0 10 20 30 40]
 [ 0 10 20 30 40]
 [ 0 10 20 30 40]
 [ 0 10 20 30 40]]

您可以对所有行、某些行、列等执行计算。。在

data *= 100

print(data)

data[:,1] += 50

print(data)

[[  0 100 200 300 400]
 [  0 100 200 300 400]
 [  0 100 200 300 400]
 [  0 100 200 300 400]
 [  0 100 200 300 400]]
[[  0 150 200 300 400]
 [  0 150 200 300 400]
 [  0 150 200 300 400]
 [  0 150 200 300 400]
 [  0 150 200 300 400]]

相关问题 更多 >