「Pythonの基礎 - 反復処理(for文)」の版間の差分

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
ナビゲーションに移動 検索に移動
(Wiki がページ「反復処理 - for文(Python)」を「Pythonの基礎 - 反復処理(for文)」に、リダイレクトを残さずに移動しました)
(文字列「<source lang="python">」を「<syntaxhighlight lang="python">」に置換)
9行目: 9行目:
Pythonでfor文を使ってループ処理のコードを書くには、forの後ろに繰り返し変数を記述する。<br>
Pythonでfor文を使ってループ処理のコードを書くには、forの後ろに繰り返し変数を記述する。<br>
続けて、inキーワードを記述した後にリストなどのシーケンスを記述して、末尾にコロンを置く。<br>
続けて、inキーワードを記述した後にリストなどのシーケンスを記述して、末尾にコロンを置く。<br>
  <source lang="python">
  <syntaxhighlight lang="python">
  for 繰り返し変数 in シーケンス:
  for 繰り返し変数 in シーケンス:
     実行コード
     実行コード
15行目: 15行目:
<br>
<br>
以下の例では、リスト変数から各要素を取得している。<br>
以下の例では、リスト変数から各要素を取得している。<br>
  <source lang="python">
  <syntaxhighlight lang="python">
  lang = ["Python","PHP","Swift"]
  lang = ["Python","PHP","Swift"]
   
   
29行目: 29行目:
次に、文字列をシーケンスとして使用する。<br>
次に、文字列をシーケンスとして使用する。<br>
以下の例では、Pythonという文字列を、繰り返し変数をsとして、1文字ずつ取得している。<br>
以下の例では、Pythonという文字列を、繰り返し変数をsとして、1文字ずつ取得している。<br>
  <source lang="python">
  <syntaxhighlight lang="python">
  for s in "Python":
  for s in "Python":
     print(s)
     print(s)
46行目: 46行目:
for文でも、while文と同様にbreak文を使用して反復処理を抜けることができる。<br>
for文でも、while文と同様にbreak文を使用して反復処理を抜けることができる。<br>
以下の例では、取得した文字がhの時にfor文から抜ける処理をしている。<br>
以下の例では、取得した文字がhの時にfor文から抜ける処理をしている。<br>
  <source lang="python">
  <syntaxhighlight lang="python">
  for s in "Python":
  for s in "Python":
     if s == "h":
     if s == "h":
62行目: 62行目:
continue文を使用して、処理をスキップして再度反復処理の先頭に戻ることができる。<br>
continue文を使用して、処理をスキップして再度反復処理の先頭に戻ることができる。<br>
以下の例では、指定した文字hの場合のみ処理がスキップしている。<br>
以下の例では、指定した文字hの場合のみ処理がスキップしている。<br>
  <source lang="python">
  <syntaxhighlight lang="python">
  for s in "Python":
  for s in "Python":
     if s == "h":
     if s == "h":
80行目: 80行目:
for文もwhile文と同様に、処理が終わったら何か別の処理をする場合にelse文と組み合わせることができる。<br>
for文もwhile文と同様に、処理が終わったら何か別の処理をする場合にelse文と組み合わせることができる。<br>
以下の例のように、else文を最後に付け加えるだけである。<br>
以下の例のように、else文を最後に付け加えるだけである。<br>
  <source lang="python">
  <syntaxhighlight lang="python">
  lang = ["Python","PHP","Swift"]
  lang = ["Python","PHP","Swift"]
   
   
98行目: 98行目:
break文で反復処理を抜けると、else文の処理は実行されない。<br>
break文で反復処理を抜けると、else文の処理は実行されない。<br>
このような処理は、break文が実行されなかった場合は、else文でチェックするような時に使用する。<br>
このような処理は、break文が実行されなかった場合は、else文でチェックするような時に使用する。<br>
  <source lang="python">
  <syntaxhighlight lang="python">
  lang = ["Python","PHP","Swift"]
  lang = ["Python","PHP","Swift"]
   
   
117行目: 117行目:
次のような辞書型変数を用意して、for文で処理する。<br>
次のような辞書型変数を用意して、for文で処理する。<br>
print関数で出力されているものは、辞書のキーの部分である。このように、辞書型変数をfor文で処理するとキーが処理される。<br>
print関数で出力されているものは、辞書のキーの部分である。このように、辞書型変数をfor文で処理するとキーが処理される。<br>
  <source lang="python">
  <syntaxhighlight lang="python">
  foods = {"breakfast":"miso soup", "lunch":"sandwich", "dinner":"steak"}
  foods = {"breakfast":"miso soup", "lunch":"sandwich", "dinner":"steak"}
   
   
131行目: 131行目:
上記のサンプルコードは、次のように辞書型変数のkeys関数を使用した処理と同じである。<br>
上記のサンプルコードは、次のように辞書型変数のkeys関数を使用した処理と同じである。<br>
for文で辞書をそのまま使用してもkeys関数を使用しても、結果はどちらもキーが取得されることになる。<br>
for文で辞書をそのまま使用してもkeys関数を使用しても、結果はどちらもキーが取得されることになる。<br>
  <source lang="python">
  <syntaxhighlight lang="python">
  foods = {"breakfast":"miso soup", "lunch":"sandwich", "dinner":"steak"}
  foods = {"breakfast":"miso soup", "lunch":"sandwich", "dinner":"steak"}
   
   
146行目: 146行目:
辞書の値を反復処理で取得する場合は、values関数を使用する。<br>
辞書の値を反復処理で取得する場合は、values関数を使用する。<br>
以下の例では、values関数を使用して辞書の値を取得している。<br>
以下の例では、values関数を使用して辞書の値を取得している。<br>
  <source lang="python">
  <syntaxhighlight lang="python">
  foods = {"breakfast":"miso soup", "lunch":"sandwich", "dinner":"steak"}
  foods = {"breakfast":"miso soup", "lunch":"sandwich", "dinner":"steak"}
   
   
160行目: 160行目:
===== for文と辞書のitems関数 =====
===== for文と辞書のitems関数 =====
辞書のキーと値をセットでタプル型に変換して反復処理する場合は、items()関数を使用する。<br>
辞書のキーと値をセットでタプル型に変換して反復処理する場合は、items()関数を使用する。<br>
  <source lang="python">
  <syntaxhighlight lang="python">
  foods = {"breakfast":"miso soup", "lunch":"sandwich", "dinner":"steak"}
  foods = {"breakfast":"miso soup", "lunch":"sandwich", "dinner":"steak"}
   
   
175行目: 175行目:
ピリオドと改行コードを文末に出力するために、print関数のendオプションを使用している。<br>
ピリオドと改行コードを文末に出力するために、print関数のendオプションを使用している。<br>
それぞれキーと値が対応した位置に出力されている。<br>
それぞれキーと値が対応した位置に出力されている。<br>
  <source lang="python">
  <syntaxhighlight lang="python">
  foods = {"breakfast":"miso soup", "lunch":"sandwich", "dinner":"steak"}
  foods = {"breakfast":"miso soup", "lunch":"sandwich", "dinner":"steak"}
   
   
193行目: 193行目:
<br>
<br>
range関数の使用方法は、range(start値, end値, step値)という形でそれぞれの値に数値を指定する。(スライスと同様の使用方法)<br>
range関数の使用方法は、range(start値, end値, step値)という形でそれぞれの値に数値を指定する。(スライスと同様の使用方法)<br>
  <source lang="python">
  <syntaxhighlight lang="python">
  for i in range(5):
  for i in range(5):
     print(i)
     print(i)
206行目: 206行目:
<br>
<br>
次に、range関数のstart値、end値、step値を指定する。<br>
次に、range関数のstart値、end値、step値を指定する。<br>
  <source lang="python">
  <syntaxhighlight lang="python">
  for i in range(1, 10, 3):
  for i in range(1, 10, 3):
     print(i)
     print(i)
217行目: 217行目:
<br>
<br>
range関数は、list関数を使用してリストに変換することができる。<br>
range関数は、list関数を使用してリストに変換することができる。<br>
  <source lang="python">
  <syntaxhighlight lang="python">
  a = list(range(1, 10, 3))
  a = list(range(1, 10, 3))
  print(a)
  print(a)
232行目: 232行目:
各リストの共通するインデックスの値が抜き出されて反復処理されている。<br>
各リストの共通するインデックスの値が抜き出されて反復処理されている。<br>
3つのリストがここでは全て同じ要素数でしたが、要素数がそれぞれ異なる場合は、一番小さい要素数に合わせたオフセットで反復処理がなされます。
3つのリストがここでは全て同じ要素数でしたが、要素数がそれぞれ異なる場合は、一番小さい要素数に合わせたオフセットで反復処理がなされます。
  <source lang="python">
  <syntaxhighlight lang="python">
  lang = ["Python", "PHP", "Swift"]
  lang = ["Python", "PHP", "Swift"]
  prefix = ["P", "P", "S"]
  prefix = ["P", "P", "S"]
248行目: 248行目:
上記のサンプルコードをrange関数を使用して記述すると、以下のようになる。<br>
上記のサンプルコードをrange関数を使用して記述すると、以下のようになる。<br>
実行すると同様の結果が出力される。<br>
実行すると同様の結果が出力される。<br>
  <source lang="python">
  <syntaxhighlight lang="python">
  lang = ["Python", "PHP", "Swift"]
  lang = ["Python", "PHP", "Swift"]
  prefix = ["P", "P", "S"]
  prefix = ["P", "P", "S"]

2021年11月19日 (金) 20:11時点における版

概要

ここでは、Pythonにおいて、条件が成立する時に反復処理(イテレーション)をするfor文を記載する。
また、range関数とzip関数を使用した処理も併せて記載する。

反復処理が可能(イテラブル)なオブジェクト(文字列、リスト、タプル、辞書等)を使用して反復処理を行うにはfor文を使用する。


for-in文で反復処理をする

Pythonでfor文を使ってループ処理のコードを書くには、forの後ろに繰り返し変数を記述する。
続けて、inキーワードを記述した後にリストなどのシーケンスを記述して、末尾にコロンを置く。

<syntaxhighlight lang="python">
for 繰り返し変数 in シーケンス:
    実行コード
</source>


以下の例では、リスト変数から各要素を取得している。

<syntaxhighlight lang="python">
lang = ["Python","PHP","Swift"]

for i in lang:
    print(i)

# 出力
Python
PHP
Swift
</source>


次に、文字列をシーケンスとして使用する。
以下の例では、Pythonという文字列を、繰り返し変数をsとして、1文字ずつ取得している。

<syntaxhighlight lang="python">
for s in "Python":
    print(s)

# 出力
P
y
t
h
o
n
</source>



break文でfor文を抜ける

for文でも、while文と同様にbreak文を使用して反復処理を抜けることができる。
以下の例では、取得した文字がhの時にfor文から抜ける処理をしている。

<syntaxhighlight lang="python">
for s in "Python":
    if s == "h":
        break
    print(s)

# 出力
P
y
t
</source>



continue文で処理をスキップする

continue文を使用して、処理をスキップして再度反復処理の先頭に戻ることができる。
以下の例では、指定した文字hの場合のみ処理がスキップしている。

<syntaxhighlight lang="python">
for s in "Python":
    if s == "h":
        continue
    print(s)

# 出力
P
y
t
o
n
</source>



for文のelse文とbreak文

for文もwhile文と同様に、処理が終わったら何か別の処理をする場合にelse文と組み合わせることができる。
以下の例のように、else文を最後に付け加えるだけである。

<syntaxhighlight lang="python">
lang = ["Python","PHP","Swift"]

for i in lang:
    print(i)
else:
    print("Done!")

# 出力
Python
PHP
Swift
Done!
</source>


また、以下の例では、break文と組み合わせている。
break文で反復処理を抜けると、else文の処理は実行されない。
このような処理は、break文が実行されなかった場合は、else文でチェックするような時に使用する。

<syntaxhighlight lang="python">
lang = ["Python","PHP","Swift"]

for i in lang:
    if i == "PHP":
        break
    print(i)
else:
    print("Done!")

# 出力
Python
</source>



for文と辞書(values関数とitems関数)

辞書型変数をfor文で処理する場合を考える。
次のような辞書型変数を用意して、for文で処理する。
print関数で出力されているものは、辞書のキーの部分である。このように、辞書型変数をfor文で処理するとキーが処理される。

<syntaxhighlight lang="python">
foods = {"breakfast":"miso soup", "lunch":"sandwich", "dinner":"steak"}

for food in foods:
    print(food)

# 出力
breakfast
lunch
dinner
</source>


上記のサンプルコードは、次のように辞書型変数のkeys関数を使用した処理と同じである。
for文で辞書をそのまま使用してもkeys関数を使用しても、結果はどちらもキーが取得されることになる。

<syntaxhighlight lang="python">
foods = {"breakfast":"miso soup", "lunch":"sandwich", "dinner":"steak"}

for food in foods.keys():
    print(food)

# 出力
breakfast
lunch
dinner
</source>


for文と辞書のvalues関数

辞書の値を反復処理で取得する場合は、values関数を使用する。
以下の例では、values関数を使用して辞書の値を取得している。

<syntaxhighlight lang="python">
foods = {"breakfast":"miso soup", "lunch":"sandwich", "dinner":"steak"}

for food in foods.values():
    print(food)

# 出力
miso soup
sandwich
steak
</source>


for文と辞書のitems関数

辞書のキーと値をセットでタプル型に変換して反復処理する場合は、items()関数を使用する。

<syntaxhighlight lang="python">
foods = {"breakfast":"miso soup", "lunch":"sandwich", "dinner":"steak"}

for food in foods.items():
    print(food)

# 出力
('breakfast', 'miso soup')
('lunch', 'sandwich')
('dinner', 'steak')
</source>


また、以下の例では、このタプルをそれぞれの変数にキーと値を代入する処理を行っている。
ピリオドと改行コードを文末に出力するために、print関数のendオプションを使用している。
それぞれキーと値が対応した位置に出力されている。

<syntaxhighlight lang="python">
foods = {"breakfast":"miso soup", "lunch":"sandwich", "dinner":"steak"}

for food, menu in foods.items():
    print("Yesterday, I had", menu, "for", food, end=".\n")

# 出力
Yesterday, I had miso soup for breakfast.
Yesterday, I had sandwich for lunch.
Yesterday, I had steak for dinner.
</source>



range関数で反復処理(数値のシーケンス生成)

for文において、range関数が使用されることがよくある。
range関数は、指定した範囲の数値の順に取得するので、イテラブルなオブジェクトを返すことができる。

range関数の使用方法は、range(start値, end値, step値)という形でそれぞれの値に数値を指定する。(スライスと同様の使用方法)

<syntaxhighlight lang="python">
for i in range(5):
    print(i)

# 出力
0
1
2
3
4
</source>


次に、range関数のstart値、end値、step値を指定する。

<syntaxhighlight lang="python">
for i in range(1, 10, 3):
    print(i)

# 出力
1
4
7
</source>


range関数は、list関数を使用してリストに変換することができる。

<syntaxhighlight lang="python">
a = list(range(1, 10, 3))
print(a)

# 出力
[1, 4, 7]
</source>



zip関数で反復処理(複数のシーケンスの反復処理)

zip関数を使用すると、複数のシーケンスを並列に反復処理することができる。

以下の例では、複数のリストをzip関数でまとめて、それぞれの位置に対応した変数を出力している。
各リストの共通するインデックスの値が抜き出されて反復処理されている。
3つのリストがここでは全て同じ要素数でしたが、要素数がそれぞれ異なる場合は、一番小さい要素数に合わせたオフセットで反復処理がなされます。

<syntaxhighlight lang="python">
lang = ["Python", "PHP", "Swift"]
prefix = ["P", "P", "S"]
suffix = ["n", "P", "t"]

for item1, item2, item3 in zip(lang, prefix, suffix):
    print(item1, item2, item3)

# 出力
Python P n
PHP P P
Swift S t
</source>


上記のサンプルコードをrange関数を使用して記述すると、以下のようになる。
実行すると同様の結果が出力される。

<syntaxhighlight lang="python">
lang = ["Python", "PHP", "Swift"]
prefix = ["P", "P", "S"]
suffix = ["n", "P", "t"]

for i in range(len(lang)):
    print(lang[i], prefix[i], suffix[i])

# 出力
Python P n
PHP P P
Swift S t
</source>