Pythonでリストを回転させる効率的な方法

リーズナブルチョイスを考える上では,「numpy使え」で終わる話だけど.

Efficient way to rotate a 2D array of integers of n size in Python – StackOverflow

空間,時間効率(空間的,時間的コスト)の話がタメになって面白い.

 
 
 

質問者のコードは僕の環境では動かないが.

def rotate_clockwise(matrix):
    transposed_matrix = zip(*matrix) # transpose the matrix
    return list(map(list, reversed(transposed_matrix))) # reverse the transposed matrix


a = [[1, 2, 3],
     [4, 5, 6],
     [7, 8, 9]]

rotate_clockwise(a)

TypeError: ‘zip’ object is not reversible

zip(*a).__reversed__()

AttributeError: ‘zip’ object has no attribute ‘reversed

「python-3.x」のタグが付いているけど,これ質問者は2系なのかな.
(3系はイテレータだけど,2系はタプルだった気がする)

def rotate_clockwise2(matrix):
    return list(map(list, zip(*matrix)))[::-1]

rotate_clockwise2(a)

[[3, 6, 9], [2, 5, 8], [1, 4, 7]]

広告
カテゴリー: 未分類 パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中