Pythonで多用する、for文の使い方をlist(配列)、range(範囲)、tuple(タプル)に対して使う方法や、スライスを使ってループする範囲を指定する方法や、
if文と組み合わせる方法やbreak, continue, passの使い方などを実例を用いて解説しています。
複雑な組み合わせで使われることが多く、難しそうに見えますが、基本構文は要素を2つ指定するだけでとてもシンプルです。
for文の基本構文
for a in A:
- 「a」:変数(任意)
- 「A」:データ
- 「:」:行末に設置(ないとエラーになる)
▼データについて補足(上記の「A」)
・文字列や数値に対して実行することが多い。
・変数で指定することが多い。
・listやtupleなど複数要素の集合体や、1つの数値や文字列を直接記述する形でも機能する。
for文の処理の内容
Aの要素を1つ取り出し、変数(上記では「a」)に格納する。これを要素の数だけ繰り返す。
1つの要素を取り出す毎に、2行目以降に記述した処理を実行する。
※処理はインデント(TABキー)でfor文より下げる。
for文の実例
・listの要素を取り出す(数値、文字列)
・タプル(tuple)型やセット(set)型に使う
・range関数で数値を取り出す
・if文で抽出条件を指定する
listの要素を取り出す
数値と文字列、変数指定と直接記述の実例。変数の数値要素の取り出し
for a in A:
list = [1,2,3]
for a in list:
print(a)
#出力
1
2
3
変数の文字列要素の取り出し
list = ["AAA","BBB","CCC"]
for a in list:
print(a)
#出力
AAA
BBB
CCC
数値直接指定
for a in [1,2,3]:
print(a)
#出力
1
2
3
文字列直接指定
for a in ["AAA","BBB","CCC"]:
print(a)
#出力
AAA
BBB
CCC
タプル(tuple)型やセット(set)型にも使える。タプル(tuple)型
tuple = "AAA","BBB", "CCC"
tuple #出力:('AAA', 'BBB', 'CCC')
type(tuple) #出力:tuple
for a in tuple:
print(a)
#出力
AAA
BBB
CCC
セット(set)型
set = {1,1,2,2,3,3,3,4}
set #出力:{1, 2, 3, 4}
type(set) #出力:set
for a in set:
print(a)
#出力
1
2
3
4
補足:タプル(tuple)の説明はこちら
range関数の数値を取り出す
for文においてrange型に格納されているデータの取扱はlist型と同じ。
例1:range(5)
0~4の範囲で変化量+1に該当する数値。
⇒ [0, 1, 2, 3, 4]
for a in range(5):
print(a)
#出力
0
1
2
3
4
例2:range(0,8,2)
0~7の範囲で変化量+2に該当する数値。
⇒ [0, 2, 4, 6]
for a in list(range(0,8,2)):
print(a)
#出力
0
2
4
6
補足:range関数について
「初期値」「範囲の終わり値」、「変化量」の3つを指定し、該当する数値をrange型で格納する関数。
※「初期値」と「変化量」は省略可
range関数の詳細はこちら
範囲を指定して取り出す
スライスを使うことで対象範囲を指定すことが可能。
スライスとは?
listなどの範囲指定方法の一種。
[ ]と:で範囲を指定する記法。
スライスの基本構文
[a:b:c]
└「a」:開始の配列番号
└「b」:終了の配列番号(未満)
└「c」:変化量構文
b,cは省略可能
スライスの細かい説明はこちら
開始する番号を指定する方法
例: 3つめの要素以降を取り出す場合
[2:]
└要素は0からカウント
開始する番号を指定
list = [1,2,3,4,5,6,7,8,9]
for a in list[2:]:
print(a)
#出力
3
4
5
6
7
8
9
取り出す範囲を指定する方法
例: 5番目から8番目の要素を抜き出す
[4:8]
└要素は0からカウント
└ 配列番号4は5つ目の要素
└ 配列番号8は9つ目の要素
└ 配列番号8は含まない(処理終了)
開始する番号を指定
list = [1,2,3,4,5,6,7,8,9]
for a in list[4:8]:
print(a)
#出力
5
6
7
8
取り出す範囲と変化量を指定
例: 50~70までで3づつ足した値を取り出す
[50:71:3]
└ 配列番号50番目
└ 配列番号71番目で終了(71番目の値は含まない)
└ 変化量:3づつ増加
range(1,100) は1~99までの整数。
for a in range(1,100)[50:71:3]:
print(a)
#出力
51
54
57
60
63
66
69
if文で条件を指定する
if文を使うことで、指定条件に一致した値のみ抽出することが可能。
>if文についてはこちら
例1: for文とif文の組み合わせ
1~9の数値の中から偶数のみ取り出す。
(10は含まない)偶数のみ取り出す
for a in range(1,10):
if a%2 == 0:
print(a)
#出力
2
4
6
8
- 「%」余り
- 「a%2==0」aを2で割った余りが0(=偶数)
例2: for文とif文の組み合わせ
1~100の数値の中から偶数かつ、90以上で、100を含まない数値を、list型で抜き出す。
(101は含まない)比較演算子の組み合わせ
list = []
for a in range(1,101):
if a%2 == 0 and a >= 90 and not a == 100:
list.append(a)
list
#出力
# [90, 92, 94, 96, 98]
if文と共によく使われる制御文
break文
指定条件で処理を終了する。break文の基本構文(if文中)
if A:
break
条件Aなら処理を中断する。
break文の実用例
1~20のうち偶数を抜き出す。
もし、aが10より大きくなったら処理を終了。break文の実用例
for a in range(1,20):
if a%2 == 0:
if a > 10:
break
print(a)
#出力
2
4
6
8
10
continue文
指定条件で処理をスキップする。continue文の基本構文(if文中)
if A:
continue
条件Aは処理をスキップ。その他は実行。
continue文の実用例1
0~4を一つづつ抜き出す。ただし、3のみスキップする。
for a in range(0,5):
if a == 3:
continue
print(a)
#出力
0
1
2
4
continue文の実用例2
0~10のうち偶数をスキップして抜き出す。(奇数のみ抜き出す)
for a in range(0,11):
if a%2 ==0 :
continue
print(a)
#出力
1
3
5
7
9
continueというと処理を継続するように聞こえるが、実際の処理はスキップになる。
pass文
記述してもしなくても処理は変わらない。
処理しないことを明示するために記述。
▼if文での使われ方
elseの処理で何も指定していないことを明示するために記述することが多い。passの基本構文
if A:
AAA
else:
pass
条件「A」の場合は処理「AAA」を実行。
それ以外の場合は何もしない。
▼処理は以下と同じ。
if A:
AAA
passが処理に影響を及ぼさないことの確認
passは複数つけてもないものとみなされる。
※インデントを無視したり、条件式中に書くと構文エラーになる。
▼(元の処理)1~10の偶数を抜き出す処理
list = []
for a in range(1,11):
if a%2 == 0:
list.append(a)
list
#出力
[2, 4, 6, 8, 10]
passあり①
list = []
for a in range(1,11):
if a%2 == 0:
pass
list.append(a)
list
#出力
[2, 4, 6, 8, 10]
passあり②
list = []
for a in range(1,11):
if a%2 == 0:
list.append(a)
pass
list
#出力
[2, 4, 6, 8, 10]
passあり③
list = []
for a in range(1,11):
pass
pass
if a%2 == 0:
pass
pass
pass
list.append(a)
pass
list
#出力
[2, 4, 6, 8, 10]
▼構文の書き方の条件から外れた場合はエラー
passエラー①
list = []
for a in range(1,11):
if a%2 == 0: pass
list.append(a)
list
#出力
# IndentationError: unexpected indent
passエラー②
list = []
for a in range(1,11):
if a%2 == 0:
pass pass
list.append(a)
list
#出力
# SyntaxError: invalid syntax