11. タプルとリスト

配列とは

配列はデータの箱

配列(Array)は複数の値を箱にいれるためのデータフォーマットです。

インデックスと値

配列はインデックス(Index)と値(value)で構成されます。インデックスは0, 1, 2 .... ,n-1の整数値をとり、n個の値があります。

配列 = [値0, 値1, 値2,... 値n-1];

配列を使わない場合

いくつかの飲み物を定義する例を考えてみましょう。 配列を使わないとデータの種類ごとに変数を用意しなければいけません。

drink1 = "コーヒー"
drink2 = "紅茶"
drink3 = "ほうじ茶"

配列を使った場合

配列を使うと複数のデータを1つの変数にまとめることができます。

タプル(tuple)

タプルとは

リスト(tuple)複数の要素を一つの変数にまとめるデータ構造の1つです。タプルはimmutable(不変長)といって、一度作成された要素は変更できません。

タプルの初期化

タプル初期化

空のタプルを作成するには、変数に () を代入します。

変数名 = ()

タプル初期化

データつきでタプルを初期化するには () の中に値を設定し、各値は , (カンマ)で区切ります。

変数名 = (値1, 値2, 値3 ...)

要素数で初期化

タプルの要素数で初期化するには、* (アスタリスク)で個数を指定して初期化します。

変数名 = (値) * 個数

タプル作成

変数「drinks」に、タプルをデータ付きで初期化します。

array_list.py
drinks = ("コーヒー", "紅茶", "ほうじ茶")
print(drinks)

タプルのデータが表示されました。このタプルのデータ要素は追加・削除できません。

結果
('コーヒー', '紅茶', 'ほうじ茶')

データ取得

リストの値を取得するにはインデックス(キー) を使います。インデックスは0 からの連番を指定します。

値 = 配列名[index];

キーを指定してデータを取得する

配列の中から「紅茶」を取得してみましょう。

「紅茶」を取得する

「紅茶」は、データの2番目にあるので、index = 1 です。取得したデータをコンソール表示してみましょう。

array_list.py
selectDrink = drinks[1]
print(selectDrink)
結果
紅茶

リスト(list)

リストとは

リスト(list) はタプルと同様のデータ構造ですが、タプルと違うのは追加削除が可能なmutable(可変長)な点です。

リストの初期化

リスト初期化

空のリストを作成するには、変数に [] を代入します。

変数名 = []

リストデータ初期化

データつきで初期化するには [] の中に値を設定し、各値は , (カンマ)で区切ります。

変数名 = [値1, 値2, 値3 ...]

要素数で初期化

リストの要素数で初期化するには、* (アスタリスク)で個数を指定して初期化します。

変数名 = [値] * 個数

リスト作成

変数「drinks」をリストで初期化します。

array_list.py
drinks = ["コーヒー", "紅茶", "ほうじ茶"]
print(drinks)
結果
['コーヒー', '紅茶', 'ほうじ茶']

データ取得

「紅茶」を取得する

「紅茶」は、データの2番目にあるので、index = 1 です。取得したデータをコンソール表示してみましょう。

array_list.py
selectDrink = drinks[1]
print(selectDrink)
結果
紅茶

データ更新

指定したインデックスの値を更新

リストデータの更新はインデックスを指定して、値を代入して更新します。

配列[index] = 値

「紅茶」を「ウーロン茶」で更新

「紅茶」を「ウーロン茶」で更新してみましょう。

array_list.py
drinks[1] = "ウーロン茶"
print(drinks)
結果
['コーヒー', 'ウーロン茶', 'ほうじ茶']

インデックス指定で代入

リストの要素数であらかじめ初期化し、インデックス指定で値を代入します。

array_list.py
numbers = [0] * 3
numbers[0] = 55
numbers[1] = 31
numbers[2] = 72

print(numbers)
結果
[55, 31, 72]

要素数のエラー

要素数より大きいインデックスの代入はできません。

array_list.py
numbers = [0] * 3
numbers[0] = 55
numbers[1] = 31
numbers[2] = 72
# インデックスが指定できない
numbers[3] = 50
結果
Traceback (most recent call last):
...
numbers[3] = 50

演算子

+演算子

リストやタプルで*+* 演算子を利用すると、結合して新しいリストを生成します。

array_list.py
numbers1 = [1, 2, 3]
numbers2 = [4, 5, 6]
numbers = numbers1 + numbers2

print(numbers)
結果
[1, 2, 3, 4, 5, 6]

+演算子

リストやタプルで*+* 演算子を利用すると、要素を繰り返した新しいリストを生成します。

array_list.py
numbers *= 3

print(numbers)

リストが3回繰り返して、新しいリストが生成できました。

結果
[1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6]

演習

問題1

変数「prices」をリストで定義して、コンソール表示してみましょう。

データ
[350, 400, 300]

問題2

「prices」から、2番目の値をコンソール表示してみましょう。

問題3

「prices」を2回繰り返して、新しいリストを生成してみましょう。

問題4

「グー」「チョキ」「パー」をランダムにコンソール表示してみましょう。1〜3のランダムな整数は、random.randint() で生成できます。

import random

# 1- 3のランダムな整数
index = random.randint(0, 2)

Python超入門