Pythonのreversed関数

beanz (2008年11月 3日 21:57) | コメント(0) | トラックバック(0)

以前のエントリーでも似たような事を書いたが、Pythonのリスト用のメソッドでsortやreverseがあるが、これらは自身を書き換えてしまういわゆる破壊的なメソッドだ。
そして意味のある値は返さないのでforループなどでは使えない。

l = [1, 4, 3, 2, 6, 5]
    for i in l.sort():
    print i

こんな事や

for i in l.reverse():
    print i

こんな事しても駄目。

比較的新しいバージョンのPythonなら同じ目的の組み込み関数にsotedとreversedがある。
こちらはそれぞれ新しいリスト(reversed関数は'reversed object')を返してくれる。リストだけではなく文字列やタプルなどの書き換え不可のオブジェクトも引数に指定できる。

ただ、sorted関数については戻り値がリストなので

list1 = [1, 4, 3, 2, 6, 5]
list2 = sorted(list1)

とすればlist2もソート済みのリストになってるが、
reversed関数の場合

list1 = [1, 4, 3, 2, 6, 5]
list2 = reversed(list1)

とした時list2はリストではなく'reversed object'というオブジェクトになってる。
リストが欲しいときはもうひとひねり必要だ。
例えば

list2 = [i for i in reversed(list1)]

これでlist2はリストになってる。
もっと簡単に

list2 = list(reversed(list1))

これでもOKだ。

文字列を逆さにしたいときは

s = "dog"
"".join(reversed(s)) #結果は'god'

こうすればいい。
日本語を逆さにしたいときも

u = u'かるい'
print "".join(reversed(u))

これで問題なく'いるか'と出力される。

ソートしたものを逆順にしたい時は

list2 = sorted(list1, reverse=True)

こうすればいい。
あと、例えば数値なんだけど文字列としてソートしたい場合

list1 = [1, 4, 3, 2, 6, 5, 11]
 sorted(list1, key=str)

とすれば[1, 11, 2, 3, 4, 5, 6]が得られる。

カテゴリ:

トラックバック(0)

トラックバックURL: http://blog.beanz-net.jp/beanz_mtos/mt-tb.cgi/14

コメントする