我想了解如何使用列表理解來查找矩陣內最大值之類的內容。如何在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