ここではプログラミング言語”Python”の初心者向けに、基本の文法について説明していきます。Python入門の初心者向けの進み方は以下をクリック。(print関数やコメント機能などの基本機能について知らない方は先に読むことをお勧めします。)
この回では、複数の要素を扱うときに使うリストについて説明します。
キーワード:リスト、カンマ、インデックス、スライス、append、insert、len、二次元リスト
リスト(list)の概念
必要としているデータが一つの場合は一つの変数(変数についてはこちら → 変数)に入れることで扱うことができましたが、複数のデータを効率的に扱う必要があるとき、Pythonではリストを使うことができます。
例えば、アルファベット26文字を格納するリストを作りたいとします。
仮にリストを使わずに作ろうとすると、26個の変数を作る必要があり、プログラム的に手間がかかります。
a = "a"
b = "b"
c = "c"
:
z = "z"
これをリストで作ると非常にシンプルなものになります。
alphabets = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n",
"o","p","q","r","s","t","u","v","w","x","y","z"]
このようにリストは複数のデータを一つの変数で扱うことが出来るようになります。
ここではリストの概念がこんな感じなんだと思っていただければOKです。
定義
リストは以下のように定義されています。
変数名 = [要素0, 要素1, …,]
入れたいデータを[ ]のなかに一つ一つ入れ、カンマ( , )で区切ります。
要素には数値や文字列などさまざまなものを入れることができます。また、要素のデータ型は統一されている必要はありません。つまり、文字列と数値を同時にリストに入れても問題ありません。
しかし、データの一貫性の観点から、基本的にはデータ型を統一しておくことをお勧めします。
また要素には一つ一つに番号が振られていて、先頭の要素から0、1、2…となります。これをインデックス(見出し番号)といいます。
このインデックスの先頭が1ではなく0から始まるということをしっかり覚えてください。つまり本来ならば、2番目の要素がインデックスで考えると1になり、4は3といったように、元々の番号から一つ引いた番号で考える必要があります。
先ほどのアルファベットのリストの例をインデックスで考えると
alphabets = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n",
"o","p","q","r","s","t","u","v","w","x","y","z"]
0番目が”a”、6番目が”g”、15番目が”p”、25番目が”z”となります。
インデックスで指定して要素を取り出す
リストに入れた要素を取り出したいときに、インデックス指定することで簡単に取り出すことができます。
取り出し方は以下になります。
リスト名[取り出したい要素のインデックス]
例えば自分はサッカー観戦が好きなので、ラ・リーガというスペインリーグのフットボールチームをリストにしたとすると
laliga = ["バルサ", "レアル", "セビージャ", "アトレティコ", "マヨルカ", "ソシエダ"]
print(laliga[0]) #1番目(インデックス0)の要素を取り出す
print(laliga[3]) #4番目(インデックス3)の要素を取り出す
print(laliga[5]) #最後(インデックス5)の要素を取り出す
print(laliga[-1]) #最後(インデックス5)の要素を取り出す
#結果
バルサ
アトレティコ
ソシエダ
ソシエダ
上のようにlaliga[0]とすると”バルサ”、laliga[3]とすると”アトレティコ” を取り出すことができます。
また最後の要素を取り出すには、laliga[5]とすると、”ソシエダ”を取り出せます。
ちなみにですが laliga[-1]としても最後の要素”ソシエダ”と返してくれます。覚えておくと便利です。
では、複数の要素を一度に取り出したいときにはどうすれば良いでしょうか? Pythonにはそれを解消してくれるスライスという機能があります。スライスは以下のようにします。
リスト名[取り出したい部分の最初の要素のインデックス:取り出したい部分の最後の要素のイン デックスに+1]
laliga = ["バルサ", "レアル", "セビージャ", "アトレティコ", "マヨルカ", "ソシエダ"]
print(laliga[1:4]) #2番目(インデックス1)から4番目(インデックス3)の要素を取り出す
print(laliga[0:2]) #1番目(インデックス0)から2番目(インデックス1)の要素を取り出す
#結果
['レアル', 'セビージャ', 'アトレティコ']
['バルサ', 'レアル']
これを使えば、先ほどの例でいくと laliga[1 : 4]とすると”レアル”, “セビージャ”, “アトレティコ” が、laliga[0:2]とすると、”バルサ”, “レアル”が取り出されます。
ここで今一度確認です。インデックスは1ではなく0から始まります。なので基本的に取り出したい要素の番号は本来の番号と比べて一つずれていることに注意して下さい。
そして、取り出したい部分の最後の要素のインデックスに+1をするということをしっかり覚えましょう。
また、コロン( : )の左右の片方を省略することもでき、左を省略すると要素の先頭から自動で取り出され、右を省略すると最後の要素まで取り出されます。
laliga = ["バルサ", "レアル", "セビージャ", "アトレティコ", "マヨルカ", "ソシエダ"]
print(laliga[:3]) #先頭から3番目(インデックス2)の要素を取り出す
print(laliga[3:]) #4番目(インデックス3)から最後の要素を取り出す
#結果
['バルサ', 'レアル', 'セビージャ']
['アトレティコ', 'マヨルカ', 'ソシエダ']
つまりlaliga[ : 3]は “バルサ”, “レアル”, “セビージャ” が、laliga[3 : ]は”アトレティコ”, “マヨルカ”, “ソシエダ” が取り出されます。
スライスは慣れるまでやっかいですが、身に付けると非常に役に立つ機能なのでマスターしましょう。
連結
リストとリストの和をとるとそれらが連結され、違うリストが出来上がります。
あるリスト + あるリスト = 連結したリスト
以下のコードを見てみましょう。
laliga_1 = ["バルサ", "レアル", "セビージャ", "アトレティコ", "マヨルカ", "ソシエダ"]
laliga_2 = ["ヘタフェ", "バレンシア", "ビジャレアル", "ビルバオ", "ベティス", "エイバル"]
print(laliga_1 + laliga_2) #laliga_1とlaliga_2をこの順に連結
#結果
['バルサ', 'レアル', 'セビージャ', 'アトレティコ', 'マヨルカ', 'ソシエダ', 'ヘタフェ', 'バレンシア', 'ビジャレアル', 'ビルバオ', 'ベティス', 'エイバル']
また、足した順にリストが出来ることに注意して下さい。
要素の追加・変更・削除
リストに要素を追加するには二種類あります。
・append()
リスト名.append(追加したいデータ)
appendを使うとリストの末尾にデータが追加されます。
・insert()
リスト名.insert(追加したいインデックス, 追加したいデータ)
insertを使うと任意の場所にデータが追加されます。
実際の例で見てみましょう。
num = [1,3,4,5,7,8,9,10]
num.append(11) #末尾に11を追加
print(num)
num.append(12) #末尾に12を追加
print(num)
num.insert(1,2) #インデックス1に2を追加
print(num)
num.insert(5,6) #インデックス5に2を追加
print(num)
#結果
[1, 3, 4, 5, 7, 8, 9, 10, 11]
[1, 3, 4, 5, 7, 8, 9, 10, 11, 12]
[1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
上のようにリストnumの要素が変わっていることが分かります。appendは末尾に、insertは任意の場所に要素を追加できることを覚えましょう。
また、リストのある要素を変更したいときは、以下のようにして変更できます。
リスト名[変更したい要素のインデックス] = 変更したいデータ
blood = ["A","B","C","AB"] #血液型を格納するリスト
blood[2] = "O" #C型は存在しないのでO型に変更
print(blood)
#結果
['A', 'B', 'O', 'AB']
上の例ではインデックス2の要素”C”を”O”に変更しています。print関数でリストbloodを見ると
blood = [“A”,”B”,”O”,”AB”]となり、変更されていることが分かります。
次にリストの要素を削除したいときは、del文を使うことができます。
del リスト名[削除したい要素のインデックス]
blood = ["A","B","O","C","AB"] #血液型を格納するリスト
del blood[3] #C型は存在しないので削除
print(blood)
#結果
['A', 'B', 'O', 'AB']
上の例ではインデックス3の”C”を削除しています。print関数でリストbloodを見ると
blood = [“A”,”B”,”O”,”AB”]となり、削除されていることが分かります
最後になりますが、要素の追加・削除では、その分のインデックスがずれるので、またそのリストを使うときはインデックスに注意する必要があります。
リストの長さ
リストの長さを知るためには便利な関数、len関数があります。
以下のように使います。
len(リスト名)
a = [1,2,3]
b = [1,2,3,4,5,6]
c = [1,2,3,4,5,6,7,8,9,10]
print(len(a))
print(len(b))
print(len(c))
#結果
3
6
10
上の例ではaの長さが3、bが6、cが10です。
リストの長さはさまざまな場面で利用します。特にfor文(後に紹介)を使うさいに、len()でリストの長さを調べ、範囲を求めるときに使います。
非常に便利な関数なので覚えておきましょう。
2次元リスト
2次元リスト(2次元配列)とは、リストの中にリストが入っている構造を指します。
[[ ], [ ], [ ], …, [ ]]
ここでは、九九の結果を2次元リストを使って作成してみます。
コード全体は以下になります。
kuku = [[1,2,3,4,5,6,7,8,9],[2,4,6,8,10,12,14,16,18],[3,6,9,12,15,18,21,24,27],
[4,8,12,16,20,24,28,32,36],[5,10,15,20,25,30,35,40,45],[6,12,18,24,30,36,42,48,54],
[7,14,21,28,35,42,49,56,63],[8,16,24,32,40,48,56,64,72],[9,18,27,36,45,54,63,72,81]]
for i in kuku:
for j in i:
print(str(j) + " ", end="")
print()
#結果
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
上の例のkukuの部分に注目してください。
kukuというリストの中に、9個の別のリストがカンマ区切りで格納されているのが分かります。
このように、リストの要素がリストであるものを2次元リストと呼びます。さらにこの中にリストを格納すると、3次元リストにすることもできます。
2次元リストに関してはfor文の回でも述べるので、今は構造を理解することだけにとどめます。
まとめ
1.リストの定義
・変数名 = [要素0, 要素1, …,]
2.各要素の番号をインデックスと呼ぶ。また、インデックスの先頭は0から始まる。
3.要素の取り出し
・リスト名[取り出したい要素のインデックス]
4.スライス機能
・リスト名[取り出したい部分の最初の要素のインデックス:取り出したい部分の最後の要素のインデックスに+1]
5.リスト同士の連結は+記号を使って普通の計算のように出来る。
6.要素の追加は二種類。
append()→末尾にデータを追加
・リスト名.append(追加したいデータ)
insert()→任意の場所にデータを追加
・リスト名.insert(追加したい部分のインデックス, 追加したいデータ)
7.要素の変更
・リスト名[変更したい要素のインデックス] = 変更したいデータ
8.要素の削除
・del リスト名[削除したい要素のインデックス]
9.リストの長さを得る
・len(リスト名)
10.二次元リスト
・[[ ], [ ], [ ], …, [ ]]
ミニクイズ
クイズは全部で5問あり、正解するごとに難しくなります。
復習してみてね。
コメント