私は面接の準備をしていて、かなり長い間この質問に行き詰まっています. 誰でもコードを手伝ってくれませんか。完全でない場合は、そのスニペットになる可能性がありますか? お願いします..
3355 次
1 に答える
20
Python 2 では、左上隅から中央に向かって時計回りに 2D のネストされたリストを出力します。
>>> def clockwise(r):
... return list(r[0]) + clockwise(list(reversed(zip(*r[1:])))) if r else []
...
>>> a = [
... [ 1, 2, 3],
... [ 5, 6, 7],
... [ 9, 10, 11]]
>>> clockwise(a)
[1, 2, 3, 7, 11, 10, 9, 5, 6]
>>> a = [
... [ 1, 2, 3, 4],
... [ 5, 6, 7, 8],
... [ 9, 10, 11, 12],
... [13, 14, 15, 16]]
>>> clockwise(a)
[1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10]
それで、ここで何が起こりますか?への引数clockwise
は 2 次元配列r
です。その内容を左から右へ、時計回りに印刷します。したがって、2 次元配列が空でない場合は、最初の要素である一番上の行を出力できます。次に、残りの行の最後の要素 (右側の数字) を出力します。繰り返したくありません。そこで、次に出力される数字が一番上の行になるように、残りの行を変換します。これを行うには、残りの行を転置して (それらが列になるように)、それらを逆にします。
Haskell で書くと、おそらくアルゴリズムはより明確になります。
import Data.List
clockwise :: [[a]] -> [a]
clockwise (x:xs) = x ++ (clockwise $ reverse $ transpose $ xs)
clockwise _ = []
于 2009-10-31T21:46:13.003 に答える