Python

Pythonの配列・分岐・ループ【標準ライブラリ】

こんにちは。Taka です。

前回、Python の標準ライブラリの組み込み型(数値と文字列) について説明をしました。
組み込み型としてすべて1記事に収めたかったのですが、ものすごく長文になってしまったので、分けて説明します。本記事では続きの 配列・分岐・ループ について説明します!

それではどうぞ!

配列(タプル・リスト・辞書・セット)について

Python ではリスト・タプル・辞書・セットという配列(コレクション)が存在しており、それぞれ意味や用途が微妙に異なります。

  1. リスト
    複数の型のデータをまとめて1つの変数内で管理できます。
    リストの要素は、角括弧 ([ ]) で囲み読点 (,) で区切ります。
    また要素の変更は可能です。
  2. タプル
    リスト同様に要素をまとめて管理できますが、一度定義すると要素の変更ができません
    そのため、プログラム実行中に要素を変更してほしくない場合に使います。
    タプルの要素は、括弧 (( )) で囲み読点 (,) で区切ります。
  3. 辞書
    リストやタプルは要素に順番があります。(0,1,2,3..)
    辞書は要素に順番がない代わりに、キー (key) を持ちます。
    辞書の要素は 波括弧 ({})で囲みコロン(<キー>:<値>) でキーと値を定義します。
  4. セット
    キーも持たず、順番も持たないコレクションです。
    他のコレクションと異なる点は、セット内で同じ値の要素を 2つ以上持つことができない点です。
    つまり、要素に 1 が定義されたら、もう一度 1 を含むことができない、ということです。
    セットの要素は波括弧 ({ }) で囲みカンマ (,) で区切ります。

上記 1 ~ 4 をまとめると以下なサンプルコードになります。

### リスト ###
# リストの要素を定義
list_elements = [1, 2, 3, "test", 5.12]
print(list_elements) # [1, 2, 3, 'test', 5.12]

# リストは要素を追加できる
list_elements.append("last") #末尾に追加
print(list_elements) # [1, 2, 3, 'test', 5.12, 'last']

### タプル ###
# タプルの要素を定義
tuple_elements = (1, 4, "tuple", 9.99)
print(tuple_elements) #
# 追加はできないのでエラーになる
tuple_elements.append("last") # AttributeError: 'tuple' object has no attribute 'append'

### 辞書 ###
# 辞書の要素を定義
dictionary_elements = {"a":"alpha", "b":"beta", "c":"theta"}
print(dictionary_elements) # {'a': 'alpha', 'b': 'beta', 'c': 'theta'}

# 辞書の b の要素だけを抜き出し
print(dictionary_elements["b"]) # beta

# 辞書に要素を追加
dictionary_elements.update (d="delta") 
print(dictionary_elements) # {'a': 'alpha', 'b': 'beta', 'c': 'theta', 'd': 'delta'}

### セット ###
# セットの要素を定義
set_elements = {1, 2, 4, 1, "set",3 ,"set"}
print(set_elements) # {1, 2, 3, 4, 'set'}
# セットに要素を追加
set_elements.add("big")
print(set_elements) # {1, 2, 3, 4, 'set', 'big'}

 

分岐

if や else で単数や複数の条件を定義して処理を分岐します。条件として用いられるのが、比較演算子やブール演算になります。

分岐については以下のように書きます。
※ 条件式の最後のコロン(:)と、処理を定義する行の改行は忘れないようにしてください。

condition1 = 10 
condition2 = True 
condition3 = "japan" 

if condition1 > 10: #条件式1
    print("条件1") # 条件式1 が True ならこの処理をする
elif condition2 is condition1: # 条件式2
    print("条件2") # 条件1 が False で 条件2 が True ならこの処理をする
elif condition3 == "japan": # 条件式3
    print("条件3") #条件1,2 が False で 条件3 が True ならこの処理をする
else:
    print("その他") # すべての条件が False ならこの処理をする

## 出力結果 ##
## 条件3

 

条件式で使われるのが、比較演算子ブール演算になります。

比較演算子

比較演算子は、A は B より大きい、A と B は同じである、など A と B を比較する際に使われる演算子で
プログラミング言語により微妙に使い方が変わります。Python での比較演算子は以下のように使います。

演算子意味
>より大きい
>=~以上
<より小さい
<=~以下
==~と等しい
!=~と等しくない
is同じオブジェクトである
is not同じオブジェクトでない

==, != と is, is not の違いについては少しわかりづらいですが、以下の公式サイトの文言を引用します。

異なる型のオブジェクトは、異なる数値型を除き、決して等価になりません。さらに、型には、 (例えば関数オブジェクトのように) その型のどの 2 つのオブジェクトも等しくないという、退化した比較の概念しかサポートしていないものもあります。複素数とその他の組み込み数値型を比較するときや、オブジェクト同士が異なる型で比較できないときや、その他順序づけが定義されていないとき、演算子 < 、 <= 、 > 、 >= は TypeError 例外を送出します。

引用元: Python 3.7.1 比較

ブール演算

ブール演算は、and や or, not を使い、結果として True か False を返します。

条件1 and 条件2:条件1 と 2 の両方が True なら True を返す。それ以外は False。
条件1 or 条件2:条件1 と 2 の両方が False なら False を返す。それ以外は True。
not 条件1:条件1 が True なら False に、False なら True を返す。

サンプルコードはこんな感じです。

bool_condition1 = True
bool_condition2 = True
bool_condition3 = False
bool_condition4 = False

# and 演算子
bool_check1 = bool_condition1 and bool_condition2
bool_check2 = bool_condition1 and bool_condition3
bool_check3 = bool_condition3 and bool_condition2
bool_check4 = bool_condition3 and bool_condition4

print("and演算子の結果は ",  bool_check1)
print("and演算子の結果は ",  bool_check2)
print("and演算子の結果は ",  bool_check3)
print("and演算子の結果は ",  bool_check4)

## 結果 ##
# and演算子の結果は  True
# and演算子の結果は  False
# and演算子の結果は  False
# and演算子の結果は  False

# or 演算子
bool_check1 = bool_condition1 or bool_condition2
bool_check2 = bool_condition1 or bool_condition3
bool_check3 = bool_condition3 or bool_condition2
bool_check4 = bool_condition3 or bool_condition4

print("or演算子の結果は ",  bool_check1)
print("or演算子の結果は ",  bool_check2)
print("or演算子の結果は ",  bool_check3)
print("or演算子の結果は ",  bool_check4)

## 結果 ##
# or演算子の結果は  True
# or演算子の結果は  True
# or演算子の結果は  True
# or演算子の結果は  False

# not 演算子
bool_check1 = bool_condition1
bool_check2 = not bool_condition1
bool_check3 = bool_condition3
bool_check4 = not bool_condition3

print("not演算子の結果は ",  bool_check1)
print("not演算子の結果は ",  bool_check2)
print("not演算子の結果は ",  bool_check3)
print("not演算子の結果は ",  bool_check4)

## 結果 ##
# not演算子の結果は  True
# not演算子の結果は  False
# not演算子の結果は  False
# not演算子の結果は  True

 

ループ (for, while)

定義した式が True である限り反復処理を行うために、ループ(繰り返し)を使います。
ループには、for文 と while文があり、それぞれ用途が少し異なります。

for文

for文によるループ処理は、リストやタプル、文字列などの反復可能なオブジェクト(イテラブルオブジェクト)に対して使用されます。リストの要素が続く限り処理が繰り返されることが基本であり、もし処理を途中で止めるためには、break文を使用します。

for文の基本構造です。※ else は必須ではないです。

また、break を使う場合はこのように if を使って break の条件を定義します。
もし break で処理が止まると、後述の else は処理されないことに注意してください。

# for と else
for '変数名' in '反復可能なオブジェクト' :
   '反復したい処理'
else:
   '最後に行いたい処理。else は必須ではない'

# for と break (else は処理されないパターン)
for '変数名' in '反復可能なオブジェクト' :
  '反復したい処理'
   if 'ループを止める条件':
     break: # 条件が True ならループが停止
else:
  '最後に行いたい処理。上記 break が処理されると else はスキップされる'

 

サンプルコードは以下のようになります。

# リストの作成
lists = [1,2,3,4,5]

# リストの値が 4 になるまで処理をする for文
for listvalue in lists:
    print(listvalue)
    if(listvalue == 4):
        break   # ここでストップ
else:
  print("ここは処理されません")

### 結果 ###
# 1
# 2
# 3
# 4

# 文字列を作成
string_value = "ABCDEF"

# 文字列を使ったループ
for alphabet in string_value:
    print(alphabet) # 文字列の1要素を出力
else:
    print("End of alphabet") # ループの最後の一文
### 結果 ###
# A
# B
# C
# D
# E
# F
# End of alphabet

 

while ループ

式の値が True である限り、処理を繰り返すのが while文になります。そのため、式の値が False になるように処理をしないと、無限ループになってしまうので注意が必要です。
また、for文とは違い、リストやタプルなどの反復可能なオブジェクトを必要としません。

while文の基本構造はこの通りです。


while '条件文の真偽':
  '反復したい処理'
  '条件文が False になるための処理'
else:
  '最後に行いたい処理。else は必須ではない'

 

サンプルコードは以下の通りです。

condition = 5

# condition が 0 になるまでループする
while condition > 0: 
    print(condition, "is not 0")
    condition -= 1 # 1 ずつ減らしている
else:
    print("end while")

### 結果 ###
# 5 is not 0
# 4 is not 0
# 3 is not 0
# 2 is not 0
# 1 is not 0
# end while

 

次のトピックについて

かなりの長編になってしまいましたが、
標準ライブラリの組み込み型についてある程度は触れることができました。
この記事はこれから Python でプログラミングをする際、何度も見直して辞書代わりに使ってもらえたらうれしいです。

次の記事では、組み込み関数について説明していきます。csv ファイルのインポートなどでも使われる関数も登場するため、ぜひ知っておきましょう。

それではまた次回に!