我想了解如何使用列表理解来查找矩阵内最大值之类的内容。如何在python列表理解的嵌套循环中执行变量赋值
这是我想要做的简化版本。
max_hourglass = 0
[[max_hourglass = i+j for j in range(4) if j < 3] for i in range(4)]
print(max)
我得到一个语法错误的最大分配。我试着将i
和j
转换为整数,以防万一这是问题,但是,似乎并不是这样。
我试图使用此代码的更复杂的问题是解决HackerRank问题。我已经解决了它,但是,我只是试图通过使用不同的技术来解决这个问题来扩展我对python3
的了解。 This is the Hackerrank problem。
这是更复杂的问题代码,以防万一问题不同。
arr = []
for _ in range(6):
arr.append([int(num) for num in input().split()])
max_hourglass = 0
for i in range(4):
for j in range(4):
hourglass = arr[i][j] + arr[i][j+1] + arr[i][j+2] + arr[i+1][j+1] + arr[i+2][j] + arr[i+2][j+1] + arr[i+2][j+2]
if hourglass > max_hourglass:
max_hourglass = hourglass
print(max_hourglass)
正如你可以看到,我试图减少到列表中理解这个问题是嵌套的循环,为其我用这个代码想出了相同的逻辑简化版本:
[max_hourglass = (arr[i][j] + arr[i][j+1] + arr[i][j+2] + arr[i+1][j+1] + arr[i+2][j] + arr[i+2][j+1] + arr[i+2][j+2]) for j in range(4) if (arr[i][j] + arr[i][j+1] + arr[i][j+2] + arr[i+1][j+1] + arr[i+2][j] + arr[i+2][j+1] + arr[i+2][j+2]) > max_hourglass] for i in range(4)]
我完全意识到这是不太可读的代码,我不会在生产中使用它,而只是想进一步理解python的列表理解语法。
对于上下文中,Hackerrank问题是在2D阵列(矩阵)由其中它们表示为沙漏形状的形状I
的值中的最大总和找到。
例如
1 1 1 0 0 0
0 1 0 0 0 0
1 1 1 0 0 0
0 0 2 4 4 0
0 0 0 2 0 0
0 0 1 2 4 0
将导致输出19
作为值:
2 4 4
2
1 2 4
加起来19.
按'max = ...'你是指'max(...)'? – TigerhawkT3
你不能在列表理解中进行分配。只是简单的做'[I + J ...]' –
在我看来,如果你对某种竞争编写代码,您应该完成它自己的优点和能力,对此有关基本语法问题讲卷。 – TigerhawkT3