【发布时间】:2016-11-11 01:53:28
【问题描述】:
我想学习如何使用列表推导来查找矩阵中的最大值之类的东西。
这是我想做的简化版。
max_hourglass = 0
[[max_hourglass = i+j for j in range(4) if j < 3] for i in range(4)]
print(max)
我在分配 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)
如您所见,我试图简化为列表理解的问题是嵌套的 for 循环,我为此代码提出了与简化版本相同的逻辑:
[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 问题是在二维数组(矩阵)中找到由形状 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(...)? -
你不能在列表理解中做作业。简单做
[i+j...] -
在我看来,如果你正在为某种竞赛编写代码,你应该根据自己的优点和能力来完成它,关于这一点,关于基本语法的问题很重要。
-
@AllDani.com - 不,不是。
-
max = 1 print max(2,3)抛出错误。这意味着如果将max编码为变量,则下一个开发人员在尝试使用内置函数时会出错。如果我错了,请纠正我。
标签: python list matrix max list-comprehension