複数の値を格納する型
複数の値を格納する型として、リストとタプル、辞書を紹介します。他にもありますが、まずはこの3つを押さえておきたいです。
複数の値を格納する型は、1つの値の中に、複数の値を保持します。これらの型は、値のグループのようなものです。大量のデータを効率よくあつかうときに、こうした型が活用されます。
種類 | 型 | 説明 |
---|---|---|
リスト | list | 0からはじまる連番で値を管理 |
タプル | tuple | リストに似ているが、定義したあとに値の変更ができない |
辞書 | dict | キーと値のペアで値を管理 |
それではリストから見ていきましょう。
リスト
Pythonのリストは、他のプログラミング言語の配列に相当するものです。リストは複数の値をまとめてあつかいます。各値は0から始まる連番で保持されます。リスト内の各値は要素と呼びます。最初の要素は要素0、次の要素は要素1です。
リストは[ ]
で作り、各要素はカンマ区切りで並べます。リストの長さはlen()
関数で得ます。
data = [10, 20, 30] print(data) # 「[10, 20, 30]」と表示 print(len(data)) # 「3」と表示
要素の値を得るときは[ ]
を使います。[ ]
を使うことで、特定の位置に値を代入することもできます。
data = [10, 20, 30, 40, 50] print(data[0]) # 「10」と表示 print(data[1]) # 「20」と表示 data[1] = 22 # 要素1に22を代入 print(data[1]) # 「22」と表示
要素の位置にマイナスの数値を指定したときは、末尾から数えます。
data = [10, 20, 30, 40, 50] print(data[-1]) # 「50」と表示 print(data[-2]) # 「40」と表示
要素を指定するときに、範囲外を指定するとエラーが出るので注意してください。たとえば要素数が5のときに、5以上の位置を指定するとエラーが出ます。要素数が5のときは要素の番号は0〜4です。
data = [10, 20, 30, 40, 50] print(data[5]) # 「IndexError: list index out of range」と表示して終了
リストのスライス(一部の切り抜き)を得るときも[ ]
を使います。たとえば[1:3]
と書けば、要素1から要素3の手前まで、つまり要素1、要素2という意味になります。
data = [10, 20, 30, 40, 50] data2 = data[1:3] # 要素1から、要素3の手前までスライス print(data2) # 「[20, 30]」と表示
リストには、append()
関数で末尾に要素を追加したり、+=
で要素をまとめて追加したりできます。
data = [10, 20, 30] data.append(40) print(data) # 「[10, 20, 30, 40]」と表示 data += [50, 60] print(data) # 「[10, 20, 30, 40, 50, 60]」と表示
リストの各要素の処理はfor
文でおこなえます。for
文は、for 変数 in リスト:
と書きます。for
文のあとの処理は、インデントしてグループ化します。
プログラムと出力の例です。
animals = ["cat", "dog", "bear"] for name in animals: print(name)
cat dog bear
要素の番号も得たいときはenumerate()
関数を組み合わせます。for 番号用の変数, 値用の変数 in enumerate(リスト):
と書きます。
プログラムと出力の例です。
animals = ["cat", "dog", "bear"] for i, name in enumerate(animals): print(i, name)
0 cat 1 dog 2 bear
タプル
タプル(tuple)はリストの仲間です。リストと違い、定義したあとに、要素の個数や値を変更できません。( )
で作り、要素をカンマ区切りで並べます。値が変更できないこと以外は、リストと同じようにあつかえます。
data = (10, 20, 30) print(data) # 「[10, 20, 30]」と表示 print(len(data)) # 「3」と表示 print(data[0]) # 「10」と表示 print(data[0:2]) # 「(10, 20)」と表示
for
文でも同じように使えます。
data = (10, 20, 30) for num in data: print(num)
タプルは、list()
関数でリストに変換できます。
data = (10, 20, 30) print(data) # 「(10, 20, 30)」と表示 print(list(data)) # 「[10, 20, 30]」と表示
タプルは、,
区切りだけでも作れます。また、左辺に,
区切りの変数を書くことで、各要素の値を受け取れます。丸括弧を付けても、付けなくてもよいです。この分割受け取りの書き方は、リストでもおこなえます。
data = 10, 20, 30 # タプル 括弧なし print(data) # 「(10, 20, 30)」と表示 (a, b, c) = data # タプル 変数で受け取り print(a, b, c) # 「10 20 30」と表示 a, b, c = data # タプル 変数で受け取り 括弧なし print(a, b, c) # 「10 20 30」と表示
辞書
辞書は、他のプログラミング言語の連想配列に相当するものです。複数の値をまとめてあつかう型です。各要素を、キーと値のペアで表します。
辞書は{ }
で作り、要素は,
で区切ります。各要素は、キーと値を"key" : "value"
のように:
で分けて書きます。辞書の要素数はlen()
関数で得ます。
各要素は、辞書のあとに[ ]
を書き、その中にキーを書くことで読み書きできます。
data = {"name": "tama", "age": 10} print(data) # 「{'name': 'tama', 'age': 10}」と表示 print(len(data)) # 「2」と表示 print(data["name"]) # 「tama」と表示 data["age"] = 11 # ageの値を書き換え print(data["age"]) # 「11」と表示
辞書をfor文で処理するときは、辞書のitems()
関数を使うとよいです。キーと値を、それぞれ変数で受け取れます。
プログラムと出力の例を示します。
data = {"name": "tama", "age": 10} for k, v in data.items(): print(f"key:{k}, value: {v}")
key:name, value: tama key:age, value: 10
条件分岐
プログラムの処理では、値によって処理を分岐させることが多いです。そうした機能を実現するのが、条件分岐という仕組みです。
条件分岐を使うと、値がaのときはAの処理を……、bのときはBの処理を……、といった感じで処理の内容を分けることができます。Pythonではif
文で条件分岐を実現できます。
if文
if 条件式:
と書き、条件式
がTrue
になるなら、後続のインデントしたグループ内の処理をおこないます。
プログラムと出力の例を示します。1つ目のif
文では、条件式がTrue
なので後続のグループ内の処理がおこなわれます。2つ目のif
文では、条件式がFalse
なので処理はおこなわれません。
if True: print("処理1") print("処理2") if False: print("処理3") print("処理4")
処理1 処理2
if
文は、1行で書くこともできます。処理が短いときは、1行で書くこともあります。プログラムと出力の例を示します。
if True: print("処理1") if False: print("処理2")
処理1
比較演算子
if
文の条件式には、ふつうはTrue
やFalse
の値を書くのではなく式を書きます。変数の値によって処理を分岐させるためです。こうした判定をおこなうのが比較演算子です。
ある変数の値が、指定の値と同じなのか、以上なのか、以下なのか。そうした比較をおこなう演算子を示します。
式の例 | 説明 |
---|---|
x == y | xとyが等しいならTrue、違うならFalse |
x != y | xとyが等しいならTrue、違うならFalse |
x > y | xがyよりも大きいならTrue、違うならFalse |
x < y | xがyよりも小さいならTrue、違うならFalse |
x >= y | xがyと等しいか大きいならTrue、違うならFalse |
x <= y | xがyと等しいか小さいならTrue、違うならFalse |
x in y | xという要素がyに存在するならTrue、違うならFalse |
x not in y | xという要素がyに存在しないならTrue、違うならFalse |
たとえば、「2以下」といった条件式は、<=
を使い、次のように書けます。
data = [0, 1, 2, 3, 4] for num in data: if num <= 2: print(num, "OK")
0 OK 1 OK 2 OK
if~else文
if〜else
と書くことで、条件式がFalse
のときの処理も書けます。
data = [0, 1, 2, 3, 4] for num in data: if num <= 2: print(num, "OK") else: print(num, "範囲外")
0 OK 1 OK 2 OK 3 範囲外 4 範囲外
if~elif~else文
if〜elif~else
と書くことで、細かな分岐もできます。elif
は複数書くこともできます。
data = [0, 1, 2, 3, 4] for num in data: if num <= 1: print(num, "1以下") elif num <= 3: print(num, "3以下") else: print(num, "範囲外")
0 1以下 1 1以下 2 3以下 3 3以下 4 範囲外
論理演算子
if
文の条件式には、さらに複雑な式を書くこともあります。「0以上、3未満」のように、複数の条件を指定するような場合です。そうした機能を実現してくれるのが論理演算子です。
式の例 | 意味 | 説明 |
---|---|---|
x and y | 論理積 | xとyの両方がTrueならTrue、違うならFalse |
x or y | 論理和 | xとyの両方、あるいはいずれかがTrueならTrue、違うならFalse |
not x | 否定 | xがTrueならFalse、xがFalseならTrue |
たとえば、「0以上、3未満」といった条件式は、and
を使い、次のように書けます。
data = [-1, 0, 1, 2, 3, 4] for num in data: if num >= 0 and num < 3: print(num, "OK") else: print(num, "範囲外")
-1 範囲外 0 OK 1 OK 2 OK 3 範囲外 4 範囲外