この記事でお伝えすること
- pythonのfor文で逆順に回す方法
- バラバラな数字を整理して逆順に回す方法
- reverseとreversedの違い
を紹介していきます。
まず、一般的な話ですが、pythonではrangeやリストを for文を回して出力します。
その順番は昇順や最初から最後に向かうようになっています。
では、逆に降順や最後から最初に向かうように逆順にしたい場合を考えていきます。
本記事では、for文を逆順に回す方法やバラバラのリストを整理して逆順に回す方法も紹介していきます。
合計で、全部で3つの方法を解説していきます。自分に合った方法でfor文を逆順に回してみてください。
for文のrangeやリストをreversedで回す方法
まず、1つ目はreversedで回す方法です。
reversedで逆順に指定できるのは、rangeと文字列、リスト、辞書、タプルなどです。
reversedは関数になるため、逆順にしたいオブジェクトを
reversed(object)
のようにreversed関数の中に入れることで逆順になります。
また、reversed関数に入れた後に、オブジェクトを使う場合も本来の順番は変化しません。
つまり、以下ということ
a = [1,2,3]
print(reversed(a)) #これでは出力されません。
>> <list_reverseiterator object at ~~>
print(list(reversed(a)))
>> [3, 2, 1]
print(a)
>> [1, 2, 3]
reversed関数を使用しても元のオブジェクトには影響を与えません。
ただし、print(reversed(~~))だとオブジェクト形式の表示がでるため、一度リスト化してから出力しましょう。
では、reversed関数で逆順にfor文を回します。
まずは、rangeで与えた範囲内を逆順で回してみましょう。
for i in range(10):
print(i)
>> 0 1 2 3 4 5 6 7 8 9
for i in reversed(range(10)):
print(i)
>> 9 8 7 6 5 4 3 2 1 0
では次にリストを逆順に回してみます。リストには文字列を入れてみます。
list_test = list('I am sleepy')
print(list_test)
>> [‘I’, ' ', 'a', 'm', ' ', 's', 'l', 'e', 'e', 'p', 'y']
for i in list_test:
print(i + ',')
>> I, ,a,m, ,s,l,e,e,p,y,
for i in reversed(list_test):
print(i + ',')
>> y,p,e,e,l,s, ,m,a, ,I,
多少、不器用な形になりましたが、以上がreversed関数で逆順にfor文を回す方法です。
rangeの書き方で逆順に回す方法
次に2つ目としてrangeの書き方で逆順に回す方法を紹介します。
これはrangeでしか通用しない方法になり、リストや辞書型には使用できません。
リストや辞書型はreversed関数を適用させましょう。
rangeで逆順に回す方法としては以下の書き方になります。
range(10,0,-1)
range(10,0,-2)
上記のようにrange関数に3つの引数を与えて、3つ目の引数にマイナスを入れることです。
これにより出力が以下の順序になります。
print(list(range(10,0,-1)))
>> [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
print(list(range(10,0,-2)))
>> [10, 8, 6, 4, 2]
このrangeの書き方によって、順序を逆にした状態でfor文で回すことで逆順の出力ができます。
for i in range(10,0,-1):
print(i)
>> 10 9 8 7 6 5 4 3 2 1
for i in range(10,0,-2):
print(i)
>> 10 8 6 4 2
以上がrange関数の書き方でfor文を逆順にする方法です。
リストや辞書には使えませんが、1つ飛ばしなどの出力アレンジができるのはいいですね。
関連記事として以下の記事もあります。宜しければご覧下さい。
バラバラのリストを整理し逆順に回す方法
今まで紹介したreversed関数とrange関数がfor文を逆順に回すための基本的な手段です。
そして、ここではユースケースとして、バラバラのリストを整理してから逆順に回す方法を紹介します。
使用するのはsorted関数です。sorted関数はリストを昇順にする方法です。
例を挙げると以下のようなコードです。
b = [3,5,1,8]
print(sorted(b))
>> [1, 3, 5, 8]
ちなみに似ている関数としてはsortがありますが、sortとsortedでは以下のような違いがあります。
#sorted
b = [3,5,1,8]
b1 = sorted(b)
print(b1)
>> [1, 3, 5, 8]
print(b)
>> [3, 5, 1, 8]
#sort
b2 = b.sort()
print(b2)
>> None
print(b)
>> [1, 3, 5, 8]
sorted関数は元のリストbは変わらないです。
しかし、sortメゾットは元のリストbの順序を変更します。
この元のリストを変更する・しないが違いになります。
もっと細かくいうと、sortedは関数、sortはリスト型はメゾットになります。
では、sorted関数を使用してバラバラのリストを整理して逆順に出力する例を書いていきます。
sortの場合についても書いていきます。
# sorted
list_num = [0,2,65,788,21]
for i in reversed(sorted(list_num)):
print(i + ‘,’)
>> 788, 65, 21, 2, 0,
# sort 1行使ってリストをsortすることが必要
list_num.sort()
for i in reversed(list_num):
print(i + ',')
>> 788, 65, 21, 2, 0,
reverseとreversedの違い
最後に、1つ目に出てきたreversed関数の類似として、reverseがあります。
これは先ほどのsortedとsortと同じような使われ方をします。
つまり、reversed関数はリストや文字列を反対に出力しますが、元のリストや文字列は変化しないです。
しかし、reverseメゾットではリストや文字列を反対に出力し、元のリストや文字列も反対にするものです。
例文を書いてみます。
a = [1,2,3]
# reversed
print(list(reversed(a)))
>> [3, 2, 1]
print(a)
>> [1, 2, 3]
# reverse
a.reverse()
print(a)
>> [3, 2, 1]
reversed関数は元のリストから新しい反転したリストを作りますが、
reverseは元のリストをそのまま反転させてしまいます。
最後に
以上がfor文を逆順に回す方法になります。
ここからは、pythonをより学習したい人向けに紹介します。
pythonをより学習するならpython全般を学習できる「PyQ」をオススメします。
PyQは、pythonの基礎からスクレイピングや機械学習、Webサイト作成まで広く取り扱っているため、pythonの技術が格段に上がります!
もし気になる方は、一度覗いてみることをオススメします。
以上です。