【Python】range関数で飛ばして表示させる方法

Pythonにおいてrange関数で飛ばして(スキップして)表示させる方法について紹介します。



range関数で1ずつ飛ばして表示

コード例

# 読み込んだ整数値以下で1ずつ飛ばして表示

n = int(input('整数値 : '))

for i in range(0, n + 1, 2):
  print(i, end=' ')
print()

実行結果1

整数値 : 15
0 2 4 6 8 10 12 14

実行結果2

整数値 : 14
0 2 4 6 8 10 12 14

range(a, b, step)でa以上b未満step個おきの数列列挙

range(a, b, step)でa以上b未満でstep個飛ばした数列を生成します。

このときb未満つまりb – 1なので注意が必要です。

このコードの場合はbをn + 1とすることによって0以上n以下から2ずつ増やした数を列挙させています。

end=’ 'で改行文字を’ '(空白文字)に置き換え

通常print関数で表示させると最後に改行文字が出力されて改行されます。

今回の場合はend=’ 'とすることで改行文字でなくスペース文字を表示させています。

そのため1つ1つの数字で改行されずスペース文字をはさんで表示されています。

例えばend=’,’とすれば,(コンマ)で区切られて表示させます。

range関数で奇数・偶数を列挙(その1)

コード例

# 読み込んだ整数値以下の奇数・偶数を表示

n = int(input('整数値 : '))

print('奇数')
for i in range(1, n + 1, 2):
  print(i, end=' ')
print()

print('偶数')
for i in range(0, n + 1, 2):
  print(i, end=' ')
print()

実行結果1

整数値 : 15
奇数
1 3 5 7 9 11 13 15
偶数
0 2 4 6 8 10 12 14

実行結果2

整数値 : 14
奇数
1 3 5 7 9 11 13
偶数
0 2 4 6 8 10 12 14

上のコードと比べて偶数はそのままですが奇数は最初の数値を1にして1からnまでの2ずつ増やした数字として並べました。

ちなみに0は2で割り切れるので偶数になります。



range関数で奇数・偶数を列挙(その2)

コード例

# 読み込んだ整数値a以上b以下の奇数・偶数を表示

a = int(input('整数値a : '))
b = int(input('整数値b : '))

a, b = sorted([a, b]) # 昇順にソート

print('奇数')
for i in range(a, b + 1):
  if i % 2 == 1:
      print(i, end=' ')
print()

print('偶数')
for i in range(a, b + 1):
  if i % 2 == 0:
      print(i, end=' ')
print()

実行結果1

整数値a : 3
整数値b : 8
奇数
3 5 7
偶数
4 6 8

実行結果2

整数値a : 8
整数値b : 3
奇数
3 5 7
偶数
4 6 8

奇数・偶数の判別方法

このコードではrange(a, b + 1)つまりa以上b以下から該当する数を探します。その中からの奇数と偶数の判別方法は以下の通りです。

「if i % 2 == 1:」つまり2で割った余りが1であるとき奇数となりその数を表示します。

「if i % 2 == 0:」つまり2で割った余りが0すなわち2で割り切れるとき偶数となりその数を表示します。

range関数の中のif文で奇数と偶数を見分けて合致している時だけ表示されるようになっています。

a, b = sorted([a, b])で昇順ソート

今回はrange関数の範囲指定の都合上aとbの大小関係をa < b(aがbよりも小さい)となるように並び変える必要があります。

そこでsorted関数で昇順に並び変えてfor文の前でa < bとなるようにしています。

実際に実行結果1・2で3と8を逆にして入力させても同じ結果が得られます。

特定の数値だけをスキップして表示

1から10までを7をスキップして表示するプログラムを考えます。

まず良くないコードから紹介します。

コード例(良くない)

# 1から10までを7をスキップして表示(悪い例)

for i in range(1, 11):
  if i == 7:
    continue
  print(i, end=' ')
print()

実行結果

1 2 3 4 5 6 8 9 10

このコードでは1から10までを7をスキップして表示しています。

もちろん結果に間違いはないのですが問題点があります。

それはスキップすべきかどうかの判定が毎回行われているためです。

今回は10個の数字ですがこれが100万までとかになるとたった1個スキップするために100万回判定を行うことになりコストがかかりすぎます。

スキップする数がキーボードから入力された数や乱数、または奇数や偶数とか変化する場合なら仕方ないです。

スキップする数があらかじめわかっているのであれば最初から省いた下のようなコードが望ましいです。

コード例(良い)

# 1から10までを7をスキップして表示(良い例)

for i in list(range(1, 7)) + list(range(8, 11)):
  print(i, end=' ')
print()

実行結果

1 2 3 4 5 6 8 9 10

このコードでは1から6の数列と8から10の数列を連結したリスト[1,2,3,4,5,6,8,9,10]を繰り返しを行う前に生成します。

そのリストからそれぞれ1個ずつ取り出して表示させています。

こうすることで無駄な判定をすることなく並べることができます。