4. リストと操作

4-1. 文字列
 Pythonでは、角括弧[ ]で囲んだコンマ区切りの要素の並び(例えば、[1, 2, 3, 4, 5]、["a", "b", "c", "d", "e"]など)をリスト型(リスト)として取り扱います。リストの型はlist型になります。

▽サンプルプログラム4-1. リストとlist型

print([1,2,3,4,5])
print(["a","b","c","d","e"])
print(type([1,2,3,4,5]))
a=["a","b","c","d","e"]
print(a)
▼プログラミングセル4-1. packages = [] terminal = false

4-2. 演算子によるリストの操作
 演算子+を使ってリストの要素を連結することができます。また、演算子*を使うとリストの要素を繰り返すことができます。リストでは、リストの要素が数値でも文字列でも連結することができます。

▽サンプルプログラム4-2. リストの操作

print([1,2]+[3,4])
print([1,2]*3)
a=["a","b"]
b=["c","d"]
print(a+b)
a=[1,2]
b=["c","d"]
print(a+b)
▼プログラミングセル4-2.

4-3. リストの長さ
 len関数を用いるとリストの長さ(要素数)を整数値として取得できます。このlen関数は利用する機会が多いので注意しておきましょう。

▽サンプルプログラム4-3. リストの長さ

print(len([1,2,3,4,5]))
a=["H","i","r","o","s","h","i","m","a"]
print(len(a))
▼プログラミングセル4-3.

4-4. インデックスによるリスト要素の取得
 文字列と同様に、リストからインデックス([数字]という添字)を使ってリストの要素を取得することができます。添字[0]だと最初の要素、添字[1]だと2番目の要素、添字[2]だと3番目の要素といった具合です。インデックスにはマイナス値も指定できます。添字[-1]は最後列の要素、添字[-2]は最後からの2番目の要素といった具合です。なお、添字の指定した数が実際の数をオーバーする場合はエラーになる点に注意してください。

▽サンプルプログラム4-4. インデックスによるリスト要素の取得

a=["a","b","c","d","e"]
print(a[0])
print(a[1])
print(a[2])
a=["a","b","c","d","e"]
print(a[-1])
print(a[-2])
print(a[-3])
a=["a","b","c","d","e"]
print(a[15]) #エラー
a=["a","b","c","d","e"]
print(a[-15]) #エラー
▼プログラミングセル4-4.

4-5. スライスによるリスト要素の取得
 文字列と同様に、リストからスライス([数字:数字]との添字)を使ってリスト要素を取得することができます。スライスを使うことで添字[X:Y]の部分リスト(開始値Xから始まり、終了値Yの1つ前まで)を取得することができます。開始値の要素は常に含まれ、終了値の要素は含まれない点に注意してください。指定した数が実際の数をオーバーした場合は、端から自動的に取得してくれます。また、先頭もしくは最後を指定したい場合は数値を省略することもできます。なお、添字[X:Y:Z]と指定した場合、X~Yの部分リストからZ間隔で要素を取り出します。

▽サンプルプログラム4-5. スライスによるリスト要素の取得

a=["a","b","c","d","e","f","g","h","i"]
print(a[0:2])
print(a[4:6])
print(a[5:15])
print(a[-15:15])
print(a[:6])
print(a[-5:])
print(a[:])
print(a[::2])
print(a[1::3])
▼プログラミングセル4-5.

4-6. リストの可変性
 文字列と異なり、リストの要素は変更することができます。リストの要素を変更したい場合は、インデックスやスライスで指定して値を代入します。空のリストを代入すれば要素を削除することもできます。また、リストのメソッド関数.append()を使えば要素の追加もできます。メソッド関数については後で見てみましょう。

▽サンプルプログラム4-6. リストの可変性

a=["a","b","c","d","e","f","g","h","i"]
a[0]="A" #先頭の要素の入れ替え
print(a)
a[4:7] = ["5","6","7"] #5-7番目の3要素の入れ替え
print(a)
a.append("j") #リストの末尾に"j"を追加
print(a)
a[7:9]=[] #8-9番目の2要素の削除
print(a)
a[:]=[] #全要素の削除
print(a)

▼プログラミングセル4-6.

4-7. リストの入れ子
 リストの中の要素にリストを代入することもできます。この状態を入れ子(またはネスト)と呼びます。

▽サンプルプログラム4-7. リストの入れ子

a=["a","b","c",["A","B","C"]]
print(a) 
print(a[0]) #先頭の要素の表示
print(a[3]) #4番目の要素の表示
print(a[3][0]) #4番目の要素内の先頭の要素を表示
a[3][1]=100 #4番目の要素内の2番目の要素に100を代入
a.append("e") #リストに要素"e"を追加
print(a)
▼プログラミングセル4-7.

4-8. リスト型のメソッド関数
 リスト型のメソッド関数とは、リスト型を宣言したときに利用できる関数(機能)になります。前述した.append()もメソッド関数の1つです。ここではリスト型の主なメソッド関数について見ていきましょう。

メソッド関数機能
.append(x)リストの最後に要素xを追加します。a[len(a):] = [x] と同じ動作です。
.extend(iterable)イテラブルのすべての要素をリストの最後に追加し、リストを拡張します。a[len(a):] = iterable と同じ動作です。※イテラブルとは繰り返しの源泉となるオブジェクトです。
.insert(i, x)指定した位置iに要素xを挿入します。第1引数は、リストのインデックスで、そのインデックスを持つ要素の直前に挿入が行われます。従って、a.insert(0, x) はリストの先頭に要素xの挿入を行います。また a.insert(len(a), x) は a.append(x) と同じ動作です。
.remove(x)リスト中でxと等しい値を持つ最初の要素を削除します。該当する要素がなければ ValueErrorが返されます。
.pop(i)リスト中の指定された位置にある要素をリストから削除して、その要素を返します。インデックスiが指定されなければ、a.pop()はリストの最後の要素を削除して返します。
.clear()リスト中の全ての要素を削除します。del a[:]や[]の代入と同じ動作です。
.index(x, i, j)リスト中でxと等しい値を持つ最初の要素のインデックスを返します。該当する要素がなければValueErrorが送出されます。iとjは任意のオプションであり、リスト中の検索対象をスライスで指定できます。
.count(x)リストでのxの出現回数を返します。
.sort(*, key=None, reverse=False)リストの項目を、インプレース演算 (元のデータを演算結果で置き換えるやりかた)でソートします。引数はソート方法のカスタマイズに使えます。
.reverse()リストの要素を、インプレース演算で逆順にします。
.copy()リストのコピーを返します。a[:] と同じ動作です。
※Python3.12.0ドキュメンテーション>>チュートリアル>>5.データ構造(https://docs.python.org/ja/3/tutorial/datastructures.html)より一部改変

▽サンプルプログラム4-8. リスト型のメソッド関数

a=[1, 2, 3, 4, 5]
b=[2, 3, 4]
a.extend(b) #aとbの連結
print(a)
a.insert(6, 4) #6番目の前に要素4を挿入
print(a)
print(a.count(2)) #要素2の数を数える
print(a.index(4)) #要素4が最初に出てくるインデックスを返す
print(a.index(4,4)) #インデックス4移行で要素4が最初に出てくるインデックスを返す
a.reverse() #順番を逆にする
print(a)
a.remove(2) #最初に出てくる要素2を削除
print(a)
a.append(6) #リストの最後に要素6を追加
print(a)
a.sort() #要素をソートする
print(a)
a.pop() #最後の要素を取り除く
print(a)
c=a.copy() #リストのコピーを代入
print(c)
a.clear() #リストの全要素を削除
print(a)
▼プログラミングセル4-8.

問題
 以下の問題の解答となるプログラムを記述しましょう。ただし、1~5の数値をリストaに、a~eの英字をリストbに格納した状態を前提とします。

  1. aとbを連結してリストcに格納しましょう。
  2. ▼プログラミングセル
  3. cの要素の数を調べて表示させましょう。
  4. ▼プログラミングセル
  5. cに対して、以下の要素をインデックスとスライスを使って表示させましょう。
    1. 先頭から6番目の文字
    2. 最後から3番目の文字
    3. 先頭から1番目~5番目の文字列
    4. 最後尾から2番目~4番目の文字列
    5. 奇数番目の文字
    ▼プログラミングセル
  6. aに6を追加してください。
  7. ▼プログラミングセル
  8. bの要素を逆順に並べ替えてください。
  9. ▼プログラミングセル