この記事でお伝えすること
- pythonのrange関数、len関数のそれぞれの使い方
- for文におけるrange関数とlen関数を組み合わせた使い方
を紹介していきます。
pythonの初心者の中には
for文でのrangeとlenの組み合わせがどう使えばいいか分からない!
こういう場合にはrange()だけで使えばいい?len()は必要ない?
と悩む方もいると思います。
ふと忘れた時に困るrange()とlen()との組み合わせ、そしてfor文と合わせた場合の使い方。
本記事でrange関数やlen関数の意味や使い方、for文と組み合わせた使い方を解説していきます。
range関数の使い方
range関数はある特定の範囲の数を持つという意味があります。
range関数の使い方を細かくみると主に4つの使い方があります。
- 0から指定値まで連続の数字を持つ
- 指定の範囲内で連続の数字を持つ
- 指定の範囲内で指定の増え方で数字を持つ
- 指定の範囲内で指定の減り方で減らすことも可能
それぞれの使い方を説明していきます。
0から指定値まで連続の数字を持つ
range(stop)
rangeに入れる引数を一つの数値とします。
するとstopの引数として数値が入ることになります。
この場合は0から入れた引数の一つ前までの整数を返します。
list(range(5))
>> [0, 1, 2, 3, 4]
list(range(10))
>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list(range(0))
>> []
rangeの引数に5を入れると0から4(引数の一つ前)までの整数を連番に出力します。
同じく引数を10とすると、0から9までが連番として出力されます。
引数0 では、空のリストが出力されます。
0から0のひとつ前(-1)までになるため、空になります。
指定の範囲内で連続の数字を持つ
range(start,stop)
rangeに入れる引数を二つの数値とします。
するとこの二つはstartとstopの引数とされます。
この場合、startとした引数の数値からstopとした引数の一つ前までの整数を返します。
list(range(1,5))
>> [1, 2, 3, 4]
list(range(5,10))
>> [5, 6, 7, 8, 9]
list(range(5,1))
>> []
rangeの引数に1と5を入れると1から4(stop引数の一つ前)までの整数を連番に出力します。
同じく引数を5と10とすると、5から9までが連番として出力されます。
では、もし引数を逆にした場合、start引数を5とstop引数1では、空のリストが出力されます。
これはrangeの中で、5から1のひとつ前(0)までを取ることとなり、5〜0になるため、空になります。
0~5ではうまくいきますが、反対ですね。
指定の範囲内で指定の増え方で数字を持つ
range(start,stop,step)
rangeに入れる引数を三つとします。
するとstartとstopとstepの引数として入れられます。
この場合、startとした引数の数値から、stop引数の一つ前まで、stepの引数ごとに順列に返します。
list(range(1,5,2))
>> [1, 3]
list(range(0,9,3))
>> [0, 3, 6]
list(range(1,5,10))
>> [1]
rangeの引数に1と5と2を入れると1から4までの中で2ごとの整数を出力します。それが1,3になります。
同じく引数を0と9と3とすると、0から8の3ごと(0,3,6)が出力されます。
では、もしstart引数とstop引数の範囲以上のstep引数を指定した場合、start引数のみを出力します。
これはstart引数からstep引数ごとの数値を出力するため、startの数値以降が無いためになります。
指定の範囲内で指定の減り方で減らすことも可能
range(start,stop,-step)
ここではrangeに入れる引数を先程と同じように三つとしますが、stepにマイナスを入れます。
すると、startとした引数の数値から、stopの引数の一つ前まで、step引数ごとに逆順に返します。
list(range(5,1,-2))
>> [5, 3]
list(range(10,0,-3))
>> [10, 7, 4, 1]
list(range(1,5,-2))
>>[]
rangeの引数に5と1と-2を入れると5から2までの中で-2ごとの整数を出力します。
それが5,3になります。
同じく引数を10と0と-3とすると、10から1の-3ごと(10,7,4,1)が出力されます。
ここで注意すべきは、今までと異なり、start>stopの関係性があることです。
でないと空の出力になってしまいます。
以上がrangeの使い方です。ここからlen()を使ったrange()の使い方を解説します。
len関数の使い方
まず、lenには文字列やリスト、タプル、辞書、などのオブジェクトの長さや要素の数を取ります。
サンプルを見てみましょう。
#文字列
print(len('this is test.'))
>> 13
#リスト
l = ['this', 'is', 'test', '.']
print(len(l))
>> 4
#タプル
t = ('this', 'is', 'test', '.')
print(len(t))
>> 4
#辞書
d = {'this':1, 'is':2, 'test':3, '.':4}
print(len(d))
>> 4
このようにlenには引数となるオブジェクトの長さや要素の数を返します。
これをrangeと組み合わせます。
rangeとlenの組み合わせ
lenにはオブジェクトの長さや要素の数を出力します。「6」や「8」などをです。
しかし、それだとfor文に必要な0からの連番は出力されません。
それを補うのがrangeになります。
range(len())によって、文字列の長さやリスト、辞書の要素の数を出力して、rangeの引数とすると0から連番が出力されてfor文にlenを使用することができます。
実際のサンプルコードを見てみましょう。
サンプルコードでは文字列とリストを元にrangeとlenでのそれぞれの出力を書いてあります。
test = 'sample code'
testlist = [0, 1, 2, 3, 4]
print(len(test))
>> 11
print(len(testlist))
>> 5
print(range(len(test)))
>>range(0, 11)
print(range(len(testlist)))
>>range(0, 5)
for i in range(len(test)):
print( i ,':', test[i] )
>> 0 : s
>> 1 : a
>> 2 : m
>> 3 : p
>> 4 : l
>> 5 : e
>> 6 :
>> 7 : c
>> 8 : o
>> 9 : d
>> 10 : e
for j in range(len(testlist)):
print( j ,":", testlist[j])
>> 0 : 0
>> 1 : 1
>> 2 : 2
>> 3 : 3
>> 4 : 4
このようにfor文で使う場合、lenでオブジェクトの長さ、要素の数を出力して
rangeで0からlenで出力される数の一つ前までの連番を出力して使います。
オブジェクトをfor文で出力したい時、このrangeとlenの組み合わせを使うのが一番簡単です。
最後に
pythonをより学習するならpython全般を学習できる「PyQ」をオススメします。
PyQは、pythonの基礎からスクレイピングや機械学習、Webサイト作成まで広く取り扱っているため、pythonの技術が格段に上がります!
もし気になる方は、一度覗いてみることをオススメします。
以上です。