リスト内包を使って行列内の最大値のようなものを見つける方法を学びたいと思います。Pythonのリスト内包の中でネストしたループ内で変数を代入する方法
これは、私がしたいことを簡略化したものです。
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。
ここでは、問題が異なる場合に備えて、より複雑な問題コードを示します。
[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)]
:あなたは私は理解を一覧表示する削減しようとしている問題を見ることができるように
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)
は、私は簡易版と同じロジックで、このコードを思い付いたためにループの入れ子になっています私はこれが読みにくいコードであることを完全に承知しており、これを本番環境では使用しませんが、むしろPythonのリストの理解構文をさらに理解したいと思っています。
ハッカーランクの問題は、形状(I
)が砂時計の形をしている最大値の合計を2D配列(行列)で見つけることです。
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