リストの基本が分かったところでリストの色々な機能(メソッド)を使って何が出来るかを見ていきます。
この記事はPythonドキュメントの《5.1.リスト型についてもう少し》を参考にしています。
Pythonでのリストの基本は以下をご覧ください。
リストへの要素の追加(append)
設定済みのリストの末尾に要素を追加するには、appendメソッドを使います。
list_append.py
# リストの末尾に追加する
fruits = ["tomato", "melon", "lemon"] # リストを定義
print(fruits) # リスト全体を表示
fruits.append("grape") # 末尾に追加
print(fruits) # 再度リスト全体を表示
実行イメージ
['tomato', 'melon', 'lemon'] ['tomato', 'melon', 'lemon', 'grape']
上記の例であれば、
fruits[3] = "apple"
とJavaScriptなどのように添え字を直接指定して代入したいところですが、これは以下のエラーとなります。
IndexError: list assignment index out of range
配列の添え字(インデックス)が範囲外という意味です。素直にappendメソッドを使いましょう。
リストの要素を削除する(remove)
list_remove1.py
# リストの要素を削除する
fruits = ["tomato", "melon", "lemon"] # リストを定義
print(fruits) # リスト全体を表示
fruits.remove("melon") # 要素「melon」を削除
print(fruits) # 再度リスト全体を表示
実行イメージ(melonが消えたところに後ろの要素lemonが詰められる感じです)
['tomato', 'melon', 'lemon'] ['tomato', 'lemon']
補足
removeメソッドは、リストの先頭からチェックして最初に見つかった要素のみ削除となります。
例えば以下のように複数同じ ‘melon’ が存在するリストの場合、
list_remove2.py
# リストの要素を削除する(内容が同じ要素が複数ある場合)
fruits = ["tomato", "melon", "lemon", "melon"] # リストを定義
print(fruits) # リスト全体を表示
fruits.remove("melon") # 要素「melon」を削除
print(fruits) # 再度リスト全体を表示
結果はこうなります。(後ろにある要素’melon’は残る)
['tomato', 'melon', 'lemon', 'melon'] ['tomato', 'lemon', 'melon']
ちなみにリスト全体の要素を削除するにはclearメソッドを使います。
例)fruits.clear()
リストの要素を反転させる(reverse)
リストの要素を反転させたい場合は、reverseメソッドを利用します。
リストの中身が入れ替わるので使用には十分注意してください…と言いたいところですが、reverseメソッドを2回繰り返せばリストの要素は元に戻りますので気にせずガンガン使いましょう。
list_reverse.py
# リストの要素を反転させる
fruits = ["tomato", "melon", "lemon", "grape"] # リストを定義
print(fruits) # リスト全体を表示
fruits.reverse() # リストの要素を反転させる
print(fruits) # 再度リスト全体を表示
実行イメージ
['tomato', 'melon', 'lemon', 'grape'] ['grape', 'lemon', 'melon', 'tomato']
リストの要素をソートする(昇順・降順)
sortメソッドは、リストの要素をABC順やあいうえお順などに並び替えるメソッドです。もちろん昇順と降順の切り替えも可能です。
昇順の例(A→Z順)
sortメソッドの引数は実際には2つありますが、引数を省略して引数無しで実行すると昇順での並べ替えとなります。
list_sort.py
# リストの要素をソートする(昇順)
fruits = ["tomato", "melon", "apple", "lemon", "grape"] # リストを定義
print(fruits) # リスト全体を表示
fruits.sort() # リストの要素を並び替える(昇順:この場合はA→Z順))
print(fruits) # 再度リスト全体を表示
実行イメージ(単語をAからZに向かって昇順に並び替えています)
['tomato', 'melon', 'apple', 'lemon', 'grape'] ['apple', 'grape', 'lemon', 'melon', 'tomato']
降順の例(Z→A順)
sortメソッドの引数にreverse=Trueを指定すると降順での並び替えとなります。(reverse=Falseとすると昇順の並び替えとなるため、前述の引数を省略したsortメソッドと同じです)
リストのsortメソッドの引数に関してはこちらを参考にしてください。
list_sort_reverse.py
# リストの要素をソートする(降順)
fruits = ["tomato", "melon", "apple", "lemon", "grape"] # リストを定義
print(fruits) # リスト全体を表示
fruits.sort(reverse=True) # リストの要素を並び替える(降順:この場合はZ→A順))
print(fruits) # 再度リスト全体を表示
実行イメージ(単語をZからAに向かって降順に並び替えています)
['tomato', 'melon', 'apple', 'lemon', 'grape'] ['tomato', 'melon', 'lemon', 'grape', 'apple']
リストの指定の位置に要素を挿入(insert)
指定した添え字(インデックス)位置に要素の挿入を行う insertメソッドは自由な位置にデータを挿入できます。
わたしはキウイフルーツが好きなので、2番目の添え字(インデックス)位置に ‘kiwi’ を挿入してみます。添え字は0から始まるので実際には3番目の要素が変化します。
list_insert.py
# リストの指定の位置に要素を追加する
fruits = ["tomato", "melon", "lemon"] # リストを定義
print(fruits) # リスト全体を表示
fruits.insert(2, "kiwi") # 添え字(インデックス)の2番目に追加
print(fruits) # 再度リスト全体を表示
実行イメージ
['tomato', 'melon', 'lemon'] ['tomato', 'melon', 'kiwi', 'lemon']
その他のリストメソッド
他にも使えそうなリストメソッドとしては、リストの中の指定の要素数を数えるcountメソッドや
例) fruits.count("melon")
要素を削除して戻り値として返すpopメソッド
例) ret = fruits.pop()
などがあります。
詳しくは《5.1.リスト型についてもう少し》を見て調べてみてください。
Pythonはオブジェクト指向言語です。リストには今回代入したような文字列だけでなく、クラスのインスタンスなども代入可能です。Pythonのクラスを勉強後は、リストにクラスインスタンスを要素として代入してみるとプログラミングの幅が広がります。
以上、Python:リストの応用(追加・削除・反転・ソート)でした。
課題
1
次のリストshohinにキーボード入力した商品名を追加するプログラムを作成せよ。
なお商品名に「END」が入力されたときキーボード入力を終了し、リストshohinの内容を以下のイメージのように番号付きで縦に表示させる。
ファイル名:list_shohin.py
リストshohinの初期状態
shohin = ["たまごプリン", "おみくじソーダ", "ガリガリさん"]
実行イメージ
商品名? わさびまんじゅう 商品名? コメッコせんべい 商品名? END 商品一覧 1:たまごプリン 2:おみくじソーダ 3:ガリガリさん 4:わさびまんじゅう 5:コメッコせんべい
# リストshohinにキーボード入力した商品名を追加するプログラム(解答例1)
shohin = ["たまごプリン", "おみくじソーダ", "ガリガリさん"]
# 商品名入力
while True:
name = input("商品名? ")
# 終了チェック
if name == "END":
break
shohin.append(name) # リストに追加
# 商品名一覧表示
print()
i = 1
for value in shohin:
print("{}:{}".format(i, value))
i += 1
# リストshohinにキーボード入力した商品名を追加するプログラム(解答例2)
shohin = ["たまごプリン", "おみくじソーダ", "ガリガリさん"]
# 商品名入力
while True:
name = input("商品名? ")
# 終了チェック
if name == "END":
break
shohin.append(name)
# 商品名一覧表示
# enumerateを使うとiに添え字、valueにリストの要素が取り出される
print()
for i, value in enumerate(shohin):
print("{}:{}".format(i+1, value))
2
キーボードから7名の部員の名前を入力させ、リストbuinに追加する。入力終了後、リストbuinを名前の昇順にソートし実行イメージのように表示させる。
ファイル名:list_buin.py
リストの初期状態
buin = []
実行イメージ(7名分の入力はひらがな又はカタカナを使うものとします)
氏名1= ハルヒ 氏名2= キョン 氏名3= ナガト 氏名4= ミクル 氏名5= コイズミ 氏名6= ツルヤ 氏名7= ササキ 【ソート後】 1:キョン 2:コイズミ 3:ササキ 4:ツルヤ 5:ナガト 6:ハルヒ 7:ミクル
# リストに追加した名前を昇順にソートして表示
buin = []
# 部員入力してリストに追加
for i in range(7):
print("部員{}= ".format(i+1), end="")
namae = input()
buin.append(namae)
# 昇順にソート
buin.sort()
# 番号付きでリストを表示
print("\n【ソート後】")
for i in range(7):
print("{}:{}".format(i+1, buin[i]))
3
以下に設定したリストhigurasiの要素を1からの番号付きで表示させる。
リストhigurasiに挿入したい文字列と挿入位置(番号)をキーボードから入力させ、挿入後のリストの状態を番号付きで表示する。
ファイル名:list_higurasi.py
リストhigurasiの定義
hiburasi = ["竜宮", "前原", "圭一", "園崎", "魅音"]
実行イメージ(挿入位置が2番目なら、元のリスト要素の2番目以降が繰り下がる)
1: 竜宮 2: 前原 3: 圭一 4: 園崎 5: 魅音 何番に挿入しますか? 2 挿入文字列? レナ 1: 竜宮 2: レナ 3: 前原 4: 圭一 5: 園崎 6: 魅音
# リストに挿入したい位置の番号と文字列をキーボードから入力させ
# 挿入後のリストの状態を番号付きで表示する(解答例1)
# リスト定義
higurasi = ["竜宮", "前原", "圭一", "園崎", "魅音"]
# 一覧表示(初期状態)
i = 1
for namae in higurasi:
print("{}: {}".format(i, namae))
i += 1
print()
# 挿入したい番号と文字列を入力
index = int(input("何番に挿入しますか? "))
str = input("挿入文字列? ")
# 指定位置に文字列を追加
higurasi.insert(index-1, str)
# 一覧表示(挿入後)
i = 1
for namae in higurasi:
print("{}: {}".format(i, namae))
i += 1
print()
# リストに挿入したい位置の番号と文字列をキーボードから入力させ
# 挿入後のリストの状態を番号付きで表示する(解答例2)
# リスト一覧表示用関数
def show_list():
for i, namae in enumerate(higurasi):
print("{}: {}".format(i+1, namae))
print()
# リスト定義
higurasi = ["竜宮", "前原", "圭一", "園崎", "魅音"]
# 一覧表示(初期状態)
show_list()
# 挿入したい番号と文字列を入力
index = int(input("何番に挿入しますか? "))
str = input("挿入文字列? ")
# 指定位置に文字列を追加
higurasi.insert(index-1, str)
# 一覧表示(挿入後)
show_list()
コメント