sort、sorted、reverse、reversed
前回、Pythonのrangeで降順の数値のリストを作成する方法を紹介しました。
今回はリストの順番を並び替えるsort、sorted、reverse、reversedの違いを解説していきます。
それでは始めていきましょう。
sort、sortedの違い
まずはsort、sortedの違いから見ていきましょう。
どちらもリストの要素を並べる(ソートする)関数で、基本的には昇順に並び替えます。
ということでまずは順番がバラバラなリストをrandom関数によって作成しました。
import random
vals = list(range(10))
print(vals)
random.shuffle(vals)
print(vals)
実行結果
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[7, 5, 2, 4, 1, 3, 8, 9, 0, 6]
これをsortを使って並び替えてみます。
sortを使って並び替えるには「リスト.sort()」とします。
すると”元のリスト”が昇順に並び替えられます。
import random
vals = list(range(10))
random.shuffle(vals)
print(vals)
vals.sort()
print(vals)
実行結果
[0, 9, 2, 8, 7, 6, 1, 5, 4, 3]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
ちなみに「sort()」自体は「元のリストを並び替える」関数なので、print関数で表示しようとしても表示できません。
import random
vals = list(range(10))
random.shuffle(vals)
print(vals)
print(vals.sort())
実行結果
[0, 9, 3, 7, 6, 1, 8, 5, 2, 4]
None
次にsortedを使ってみます。
sortedの場合は「sorted(リスト)」とすると、昇順に並び替えられますが、元のリストは変わりません。
import random
vals = list(range(10))
random.shuffle(vals)
print(vals)
print(sorted(vals))
print(vals)
実行結果
[4, 0, 5, 7, 2, 6, 8, 3, 9, 1]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[4, 0, 5, 7, 2, 6, 8, 3, 9, 1]
つまりsortedの結果を使いたい場合は、変数に格納してやることが必要になります。
import random
vals = list(range(10))
random.shuffle(vals)
vals_new = sorted(vals)
print(vals)
print(vals_new)
実行結果
[9, 6, 8, 5, 2, 4, 1, 7, 0, 3]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
このようにsortの場合は「元のリストが並び替えられる」、そしてsortedの場合は「元のリストは並び替えられない」というのが違いになります。
降順にする場合はsortの場合は「リスト.sort(reverse=True)」、sortedの場合は「sorted(リスト, reverse=True)」とします。
import random
vals = list(range(10))
print(vals)
vals.sort(reverse=True)
print(vals)
実行結果
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
import random
vals = list(range(10))
print(vals)
print(sorted(vals, reverse=True))
実行結果
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
reverse、reversedの違い
reverseの使い方はsortと同じで「リスト.reverse()」で、元のリストが降順に並び替えられます。
vals = list(range(10))
print(vals)
vals.reverse()
print(vals)
実行結果
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
reversedの使い方はsortedと同じく「reversed(リスト)」ですが、オブジェクトで返ってくるため中身を見るにはリストとするかアンパックする必要があります。
vals = list(range(10))
print(vals)
print(reversed(vals))
print(list(reversed(vals)))
print(*reversed(vals))
実行結果
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
<list_reverseiterator object at 0x112f8bdf0>
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
9 8 7 6 5 4 3 2 1 0
ということでreverse、reversedの違いも同じく「元のリストが並び替えられるか、並び替えられないか」が違いになります。
次回はリストのコピーに関して解説をしていきます。
ではでは今回はこんな感じで。
コメント