ひきメモ

2007-12-17

[]リストとタプルと並び替え

元のリストを並び替える

>>> arr = [3, 1, 5, 2, 4]
>>> arr.sort()    # 昇順に並び替え
>>> arr
[1, 2, 3, 4, 5]
>>> arr = [3, 1, 5, 2, 4]
>>> arr.reverse() # 逆順に並び替え
>>> arr
[4, 2, 5, 1, 3]

これらはリストオブジェクトのメソッドなので、タプルには使えません。


新しいリストを作って並び替える

sorted( )、reversed( )はリスト、タプル、イテレータから新しいリストを作ります。

>>> arr = (3, 1, 5, 2, 4)
>>> sorted(arr)        # 昇順に並び替えた新しいリスト
[1, 2, 3, 4, 5]
>>> tuple(sorted(arr)) # 昇順に並び替えた新しいタプル
(1, 2, 3, 4, 5)
>>>
>>> arr = [3, 1, 5, 2, 4]
>>> reversed(arr)      # 要素を逆順に返すイテレータ
<listreverseiterator object at 0x009D52B0>
>>> for i in reversed(arr):
...     print i,
...
4 2 5 1 3
>>> list(reversed(arr))  # 逆順に並び替えた新しいリスト
[4, 2, 5, 1, 3]
>>> tuple(reversed(arr)) # 逆順に並び替えた新しいタプル
(4, 2, 5, 1, 3)

[]変数名と関数名は同じにしてはいけない

関数オブジェクトです。変数に代入することも可能です。

>>> range
<built-in function range>
>>> hoge = range
>>> hoge(1, 10)
[1, 2, 3, 4, 5, 6, 7, 8, 9]

関数名は関数オブジェクトを参照している変数と考えていいんでしょうか。別の関数を代入することができます。

>>> range(1, 10)  
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range = xrange
>>> range(1, 10)
xrange(1, 10)

このことは関数を予期せぬ形で上書きしてしまう危険性があることを意味しています。

>>> int("10") # ここでのintは関数
10
>>> int = 5   # ここでintは関数ではなく数値になる
>>> int("10") # 数値なので関数呼び出しはできない
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable