コロンの使い方の小ネタ
CodeSnippetsのPythonカテゴリをぼーっと眺めてたら面白い書き方を見つけました。
http://www.bigbold.com/snippets/tag/python/
あるリストの逆順を得たい時、ふつうこんな感じで
>> a = [1, 2, 3, 4, 5, 6] >> a.reverse() >> print a [6, 5, 4, 3, 2, 1]
書きますが、reverseは破壊的メソッドなので場合によってはイヤンな感じ。ですが次のようにかけば大丈夫。
>> a = [1, 2, 3, 4, 5, 6] >> a[::-1] [6, 5, 4, 3, 2, 1]
ちなみに、a[::2]だと[1, 3, 5]、a[::3]だと[1,4]が返ってきます。初めて知った。ちょっとおもしろい。
で、これを使ってちょっとコード書いてみたくなったので(手段のために目的がある。。)書いてみました。
m = [1,2,3, 4,5,6, 7,8,9,] print group_row(m, 3) print group_column(m, 3)
と、やると
[[1, 2, 3], [4, 5, 6], [7, 8, 9]] [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
こんなリストが返ってくるサンプルコードです。
def group_row(lst, n): l, result = lst[:], [] while l: result.append(l[:n]) l = l[n:] return result def group_column(lst, n): l, result = lst[:], [] for i in range(n): result.append(l[::n]) l.pop(0) return result
追記:
いじってたら両方とも一行でかけてしまった。。。すごいなPython。てかちょっと変態っぽいか、、これは。
def group_row(lst, n): return [lst[i:i+n] for i in range(len(lst))[::n]] def group_column(lst, n): return [lst[i::n] for i in range(n)]