私は、zip()
メソッドを使用してPythonで2D配列の非常に特定の部分を抽出したいと思います。私はこのような何かを達成するためにジッパーを使用したい:私は面接の練習問題にPythonで以下の2次元配列で働いていますPythonで 'zip()'をstepパラメーターで使用することはできますか?
>>> sub_matrix = list(zip([*grid[0:3]]*3))
# Desired output example (Option 1)
[".","4",".", ".",".","4",".",".","."]
# Desired output example (Option 2)
[[".","4","."],
[".",".","4"],
[".",".","."]]
。
grid = [[".","4",".",".",".",".",".",".","."],
[".",".","4",".",".",".",".",".","."],
[".",".",".","1",".",".","7",".","."],
[".",".",".",".",".",".",".",".","."],
[".",".",".","3",".",".",".","6","."],
[".",".",".",".",".","6",".","9","."],
[".",".",".",".","1",".",".",".","."],
[".",".",".",".",".",".","2",".","."],
[".",".",".","8",".",".",".",".","."]]
この問題を解決する方法の1つは、スドクゲームの3 x 3の「領域」に正当な値が含まれるようにすることです。 zip()
を使用して、マトリックスの3 x 3部分を素早く抽出したいと思います。たとえば、左上の領域では、テストに4が2回含まれているためテストが失敗します。
>>> sub_grid = grid[0:3]
>>> print(sub_grid)
[['.', '4', '.', '.', '.', '.', '.', '.', '.'],
['.', '.', '4', '.', '.', '.', '.', '.', '.'],
['.', '.', '.', '1', '.', '.', '7', '.', '.']]
私はそれを明らかにするために、印刷を少し変更しますが、この時点で、I:私は次のように私は最初の3行を取得するには、グリッドをサブセットすることができます知っている
3つの配列を3つの 'step'を使ってzipしたいので、それぞれの新しい配列は各配列から3つの値を圧縮して次の配列に移動します。
Python3 docs on zip
には、これを行う方法についての抜粋がありますが、目的の出力が得られません。
イテラブルの左から右の評価順序が保証されています。 これは、を使用して、データ系列を の長さのグループにクラスタリングするためのイディオムを可能にします。
(後世のために、質問はCodeFights will be hidden until unlockedからである)
すべてのヘルプは大歓迎です。ありがとう。
numpyでは、これは 'grid [0:3、0:3]'となります。 –