スマートフォン・タブレットからインターネットサーバーオペレーション

APPW.jp

Python リスト内包表記で要素転置(反転&回転)

Python のリスト内包表記でリスト要素を転置して、反転&回転リストを作成します。

サンプルのリストは、次のような 4×4 の二次元リストです。



$ python
>>> x = [['0','1','2','3'],['4','5','6','7'],['8','9','A','B'],['C','D','E','F']]
>>> for row in x:
...     row
...
['0', '1', '2', '3']
['4', '5', '6', '7']
['8', '9', 'A', 'B']
['C', 'D', 'E', 'F']
>>>

リスト行の上下反転。



$ python
>>> rx = [v for v in reversed(x)]


$ python
>>> x = [['0','1','2','3'],['4','5','6','7'],['8','9','A','B'],['C','D','E','F']]
>>> for row in [v for v in reversed(x)]:
...     row
...
['C', 'D', 'E', 'F']
['8', '9', 'A', 'B']
['4', '5', '6', '7']
['0', '1', '2', '3']
>>>

リスト要素の右回転。

※ zip( ) 関数は、 複数のリストの同一インデックス要素をタプルにまとめて返します。zip( ) 関数の引数内の * 演算子は、引数のリスト要素を個別に順番に関数の引数に渡します(引数リストのアンパック)。



$ python
>>> rx = [list(v) for v in list(zip(*reversed(x)))]


$ python
>>> x = [['0','1','2','3'],['4','5','6','7'],['8','9','A','B'],['C','D','E','F']]
>>> for row in [list(v) for v in list(zip(*reversed(x)))]:
...     row
...
['C', '8', '4', '0']
['D', '9', '5', '1']
['E', 'A', '6', '2']
['F', 'B', '7', '3']
>>>

リスト要素の左回転。



$ python
>>> rx = [u for u in reversed([list(v) for v in list(zip(*x))])]


$ python
>>> x = [['0','1','2','3'],['4','5','6','7'],['8','9','A','B'],['C','D','E','F']]
>>> for row in [u for u in reversed([list(v) for v in list(zip(*x))])]:
...     row
...
['3', '7', 'B', 'F']
['2', '6', 'A', 'E']
['1', '5', '9', 'D']
['0', '4', '8', 'C']
>>>

リスト行の上下反転とリスト要素の左右反転。



$ python
>>> rx = [[u for u in reversed(v)] for v in reversed(x)]


$ python
>>> x = [['0','1','2','3'],['4','5','6','7'],['8','9','A','B'],['C','D','E','F']]
>>> for row in [[u for u in reversed(v)] for v in reversed(x)]:
...     row
...
['F', 'E', 'D', 'C']
['B', 'A', '9', '8']
['7', '6', '5', '4']
['3', '2', '1', '0']
>>>

リスト要素の右回転&左右反転。



$ python
>>> rx = [[t for t in reversed(u)] for u in [list(v) for v in list(zip(*reversed(x)))]]


>>> x = [['0','1','2','3'],['4','5','6','7'],['8','9','A','B'],['C','D','E','F']]
>>> for row in [[t for t in reversed(u)] for u in [list(v) for v in list(zip(*reversed(x)))]]:
...     row
...
['0', '4', '8', 'C']
['1', '5', '9', 'D']
['2', '6', 'A', 'E']
['3', '7', 'B', 'F']
>>>

リスト要素の左回転&左右反転。



$ python
>>> rx = [[t for t in reversed(u)] for u in reversed([list(v) for v in list(zip(*x))])]


$ python
>>> x = [['0','1','2','3'],['4','5','6','7'],['8','9','A','B'],['C','D','E','F']]
>>> for row in [[t for t in reversed(u)] for u in reversed([list(v) for v in list(zip(*x))])]:
...     row                                                 
...
['F', 'B', '7', '3']
['E', 'A', '6', '2']
['D', '9', '5', '1']
['C', '8', '4', '0']
>>>

Python リスト内包表記で要素転置(反転&回転)』を公開しました。