Python3のリスト型は複数の要素をひとまとまりのデータにまとめて扱います。
インデックスが0から始まるつまり配列です。
Pythonの配列関連のものは他にも以下のものがあります。
- タプル:変更不可の配列
- 辞書:KEYとVALUEをセットにした配列(連想配列)
- 集合:辞書からKEYのみを残した重複しない要素の配列
今回はリストについての説明です。リストの作り方はJavaScriptの配列の作成と同じです。ブラケットの中に要素をカンマ区切りで記述します。要素は文字でも数字でも、またオブジェクトでも入れられます。
変数名 = [要素1,要素2,要素3,…]
リスト作成の例
# リスト作成 l = [1,20,4,50,2,1,2] # リストlの表示 # [1,20,4,50,2,1,2] print(l)
リストの中の個別要素を取り出して表示するにはインデックス番号を使います。インデックスは0から始まりますので注意してください。
最初から2番目のものは、インデックス番号は、0,1,2,3,の順になっていますので、「2」ではなく「1」と指定する必要があります。
最後の要素を指定する場合はインデックスを-1にします。
また、3番目から5番目のように範囲を指定する場合は特に注意が必要です。この場合は l[2:5] のように記述します。「からまで」の範囲指定はコロンで区切って表します。最初の数字は0を含めて何番目かを数字で指定して、最後の数字は本来の何番目か(0から数えない)を入れます。これは慣れるまで間違いやすいので気をつけましょう。
リスト要素の数はlen()を使い、型を調べたい場合はtype()を使います。
list()を使うとシーケンス型の要素をリスト化することができます。
リストの中の個別要素を取り出して表示する例
l = [1,20,4,50,2,1,2] # index番号2の表示 # 4 print(l[2]) # 最後から1番目の表示 # 2 print(l[-1]) # index番号2から4まで表示 # [4,50,2] print(l[2:5]) # リスト要素の数 # 7 print(len(l)) # リストの型 # <class 'list'> print(type(l)) # 引数にシーケンス型の要素をリストに作成 # [‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’] print(list('abcdefg')) # リスト作成 n = [1,2,3,4,5,6,7,8,9,10] # 0番目からステップ2で取り出す # [1, 3, 5, 7, 9] print(n[::2]) # 最後から順に取り出す # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1] print(n[::-1])
多次元配列の例
# リスト作成 l = [1,20,4,50,2,1,2] n = [1,2,3,4,5,6,7,8,9,10] # 多次元のリスト作成 x = [l,n] # [[1, 20, 4, 50, 2, 1, 2], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]] print(x) # [1, 20, 4, 50, 2, 1, 2] print(x[0]) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] print(x[1]) # 20 print(x[0][1])
特定の要素を変更する場合は便利なメソッドを使います。
メソッド | 使い方 | 説明 |
---|---|---|
append() | append(オブジェクト) | リストの最後に要素を追加 |
insert() | insert(index,オブジェクト) | 要素を指定のインデックス位置に挿入 |
pop() | pop(index) | 指定のインデックスの要素を削除 |
del文 | del リスト[index] | indexで指定した要素を削除 |
remove() | remove(オブジェクト) | 指定した要素の値を削除 |
リスト同士の結合はそれぞれのリストを加算「+」します。
リストの値を変更例
# リスト作成 n = [1,2,3,4,5,6,7,8,9,10] # 最後に100を追加 # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100] n.append(100) print(n) # 0番目に20追加 # [20, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100] n.insert(0,20) print(n) # 最後の要素を取得 # 100 print(n.pop()) # 先頭の要素を取得 # 20 print(n.pop(0)) # 現在のリストnの要素 # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] print(n) # 0番目の要素を削除 # [2, 3, 4, 5, 6, 7, 8, 9, 10] del n[0] print(n) # 要素の3を削除 # [2, 4, 5, 6, 7, 8, 9, 10] n.remove(3) print(n) # リスト作成 a = [1,2,3,4,5] b = [6,7,8,9,10] # リストの結合 # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] c = a+b print(c) # リストの結合 # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] a += b print(a)
リストのメソッドには他にも便利なものがあります。
index()は引数に指定した要素が何番目かを返します。index()の引数が2つある場合は最初の引数の要素の後にある第2引数の要素が何番目かを表示します。
便利なリストのメソッドを活用した例
# リスト作成 myList = [1,2,3,4,5,6,7,3] # 3という要素のインデックス番号 # 2 print(myList.index(3)) # 2番目の3のインデックス番号 # 7 print(myList.index(3,3)) #リストの要素が3のインデックス番号 # 2 print(myList.count(3)) # 昇順ソート # [1, 2, 3, 3, 4, 5, 6, 7] myList.sort() print(myList) # 降順ソート # [7, 6, 5, 4, 3, 3, 2, 1] myList.sort(reverse=True) print(myList) # 文字列を配列にする # [‘My’, ‘name’, ‘is’, ‘Tahara’] nameList = 'My name is Tahara' to_split = nameList.split(' ') #' 'には空白を入れること print(to_split) # 空白区切りで文字列につなぐ # My name is Tahara x = ' '.join(to_split) print(x)
参照渡しの問題点
参照渡しの例
# リスト作成 i = [1,2,3,4,5] # 変数jに代入 j = i # jの値に新しい値100を代入 j[0] = 100 # j= [100, 2, 3, 4, 5] print('j=',j) # i= [100, 2, 3, 4, 5] print('i=',i)
リストは参照渡しになるので注意しなければなりません。配列が参照渡しになるJavaScriptと同じです。
参照渡しにしない場合は次のようにcopy()メソッドを使います。
# リスト作成 x = [1,2,3,4,5] # 参照渡しではなくコピーする y = x.copy() # jの値に新しい値100を代入 y[0] = 100 # x= [1, 2, 3, 4, 5] print('x=',x) # y= [100, 2, 3, 4, 5] print('y=',y)