LoginSignup
5
5

More than 3 years have passed since last update.

Pythonの繰り返し処理

Posted at

pythonの繰り返し処理についてまとめました。
初級者向けです。
pythonバージョン:3.6.9
公式ドキュメントは以下が参考になります。
for文・while文
range

Rangeを使用するfor

Rangeオブジェクトを使用する繰り返しは、主に回数指定のループ処理に使用します。
Rangeオブジェクトはrange(start, stop, step)とすることで生成でき、for文中で用いることでstartからstop - 1 まで(stop自体は含まれません)をstepずつ増やしながら実行することができます。以下にいくつか例を挙げます。

N回繰り返す

for i in range(5):
  print(i)
# 0 ~ 4 が出力される
#Rangeのイニシャライザは、startが0、stepが1のデフォルト値があります。

1から始めて、2ずつ増やしながら繰り返し

#stepに与える値を変えることで任意の順序でループができます
for i in range(1, 10, 2):
  print(i)
#1, 3, 5, 7, 9 が出力される

値を減らしながら繰り返す

逆に減らしながらの実行も可能です。

#startが10、stopが-1、stepが-1なので、10から始まり0までを1ずつ減らしながら処理します
for i in range(10, -1, -1):
  print(i)
#10 ~ 0が減少しながら出力される

For

こちらはrangeを使用しない場合のforの使用方法です。
主にイテラブルなどの集合操作に使用します。

リストなどの要素をすべて繰り返し処理する

Javaなどで言うところのforeach に該当するものです。
処理することができるのは、イテラブルと呼ばれるオブジェクトです。リストやセット、タプルなどがこれにあたります。
__iter__()を実装しているものがイテラブルと呼ばれるのですが、詳細な解説は割愛します。)

#リストの全要素を繰り返す
a = [1, 3, 5, 7]
for n in a:
    print(n)

#セットに対しても同様
s = {1, 2, 3, 4}
for n in s:
    print(n)

なお、ディクショナリについては、ディクショナリが持つメソッドを用いてキーと値を取り出します。

#キーをすべて処理する
for k in m.keys():
  print(k)

#値をすべて処理する
for v in m.values():
  print(v)

#キーと値のペアに対して処理をする
for k, v in m.items():
  print(str(k) + v)

インデックス付きで繰り返す

要素を走査しつつインデックスも使用したい場合はenumerateを使用します。


a = ['a', 'b', 'c', 'd', 'f']
for i, n in enumerate(a):
    print(i, n)
#以下のように出力されます。
#0 a
#1 b
#2 c
#3 d
#4 f

複数のイテラブルを同時に処理する

複数のイテラブルの要素を順に同時に扱いたいときはzip()を使います。

a = [1, 2, 3, 4, 5]
b = ['a', 'b', 'c', 'd', 'e']

for i, j in zip(a, b):
    print(str(i) + j)

注意点として、イテラブルの要素数が異なる場合、余分な(要素数の多い方の)要素は無視されます。

#リストaが持つ要素のうち、後ろ3つは処理対象になりません
a = [1, 2, 3, 4, 5, 6, 7, 8]
b = ['a', 'b', 'c', 'd', 'e']

for i, j in zip(a, b):
  print(str(i) + ' ' + j)

#1 a
#2 b
#3 c
#4 d
#5 e

# 6 ~ 8 が出力されません!

While

whileは、「ある条件を満たしている間」処理を実行し続けます。

#この例だと、iが10未満の間、処理を続けます
i = 0
while i < 10:
  print(i)
  i += 1
# 0 ~ 9 が出力されます。

条件を満たしている間実行し続けるので、下記のコードは無限ループです。

#無限ループの簡単な例
#whileの条件が常にTrueのため、無限ループ
while True:
  print('hoge')

continue, break, else

continue, break, elseは、それ単独ではループ処理を実現しませんが、上記に挙げたforwhileと組み合わせることで、ループ処理中に処理の中断やスキップなどができるようになります。

continue

continueは、以下の処理をスキップして、次のループ処理に移ります。
特定の条件の場合は処理をしたくないときなどに使用します。

for i in range(10):
  if i % 2 == 0:
    #偶数の場合、continueが実行され、次のループ処理に移ります
    continue
  print(i)
# 1,3,5,7,9 が出力されます

break

breakは、ループ処理そのものを終了します。特定の条件を満たした場合にループ処理を終了させたい場合などに使用します。

for i in range(10):
  # i が7の時に処理を終了するため、7以降の数字は出力されません。
  if i == 7:
    break
  print(i)
#0,1,2,3,4,5,6が出力されます

else

elseは、ループ処理が終了後、かつbreakでループが終了していないときに実行されるブロックです。

for i in range(10):
  print(i)
else:
  print('done!')
#0 ~ 9が出力された後、done! が出力されます。

breakでループから抜けた場合はelseは実行されないため、下記の例ではelse句は実行されません。

for i in range(10):
  if i == 7:
    break
  print(i)
else:
  print('done!')

# 0 ~ 6が出力され、処理が終了します

以上、他にループ処理についての知見が増えたらまた編集します。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5