プログラミングで文字列操作と同じくらいよく扱うのが、配列やリストの操作です。
複数のデータを管理する配列やリストには、様々な種類があり、用途に応じて使い分けることが重要となります。
本記事では、Pythonの配列・リストについて、種類と操作方法をまとめました。
プログラミング初心者の方の学習や、忘れてしまった方の復習として、参考にしていただければ幸いです。
記載しているプログラムは、Python3.6.8を使って動作確認をしています。
Pythonの配列・リスト操作
配列・リスト操作として、以下の内容をとりあげます。
- 配列・リストの種類
- 配列・リストの作成
- 配列・リストから値を取得する
- 配列・リストの長さ(要素数)を取得する
- 配列・リストに要素を追加する
- 配列・リストから要素を削除する
- 配列・リストをコピーする
- 配列・リストをループさせる
- 配列・リストの順番を入れ替える
- 配列・リスト同士を結合する
- 配列・リストを検索する
配列・リストの種類
複数のデータを管理する配列やリストは、プログラミング言語によって様々なデータ構造がサポートされています。
Pythonでは、以下の4種類を扱うことができます。
- リスト:1つの要素に1つのデータが入る。インデックスは番号で管理される。要素は書き換えることができ、追加や削除が自由にできる。
- タプル:リストに似ているが、要素の書き換えはできない。
- 辞書(連想配列):keyとvalueで1つの要素を管理する。追加や削除も自由にできる。
- 集合(set):要素の重複がなく、順序を保持しない。
今回は主に、リストに関する操作を中心にまとめていきます。
配列・リストの作成
リストの作成は、[]内に直接値を指定します。型が異なる要素同士を含めることも可能です。
a = [1, 'a', 'Hello Python'] print(a) # -> [1, 'a', 'Hello Python']
タプルの作成は、()内に直接値を指定します。型が異なる要素同士を含めることも可能です。
t = (1, 'a', 'Hello Python') print(t) # -> (1, 'a', 'Hello Python')
辞書の作成は、{}内にkeyとvalueを指定します。型が異なる要素同士を含めることも可能です。
d = {1:'One', 'a':2, 'Hello':'Python'} print(d) # -> {1: 'One', 'a': 2, 'Hello': 'Python'}
集合はの作成は、set()に値を指定します。
s = set([1, 'a', 'Hello Python']) print(s) # -> {1, 'a', 'Hello Python'}
配列・リストから値を取得する
リストから値を取得するには、取得したい要素のインデックスを指定します。
a = [1, 'a', 'Hello Python'] r = a[2] print(r) # -> Hello Python
タプルから値を取得には、取得したい要素のインデックスを指定します。
t = (1, 'a', 'Hello Python') r = t[2] print(r) # -> Hello Python
辞書から値を取得するには、[]にキーを指定するか、getを使います。
d = {1:'One', 'a':2, 'Hello':'Python'} r = d['Hello'] print(r) # -> Python
d = {1:'One', 'a':2, 'Hello':'Python'} r = d.get('Hello') print(r) # -> Python
集合から値を取得するには、リストに変換後、要素のインデックスを指定します。
s = set([1, 'a', 'Hello Python']) r = list(s)[2] print(r) # -> Hello Python
配列・リストの長さ(要素数)を取得する
リストの長さを取得するには、lenを使います。
a = [1, 'a', 'Hello Python'] r = len(a) print(r) # -> 3
タプルの長さを取得するには、lenを使います。
t = (1, 'a', 'Hello Python') r = len(t) print(r) # -> 3
辞書の長さを取得するには、lenを使います。
d = {1:'One', 'a':2, 'Hello':'Python'} r = len(d) print(r) # -> 3
集合の長さを取得するには、lenを使います。
s = set([1, 'a', 'Hello Python']) r = len(s) print(r) # -> 3
配列・リストに要素を追加する
リストの末尾に要素を追加するには、appendを使います。
a = [1, 'a', 'Hello Python'] a.append(4) print(a) # -> [1, 'a', 'Hello Python', 4]
リストの任意の場所に要素を追加するには、insertを使います。
第1引数に追加したいインデックスを、第2引数に追加したい要素を指定します。
a = [1, 'a', 'Hello Python'] a.insert(0, 4) print(a) # -> [4, 1, 'a', 'Hello Python']
タプルは変更不可のため要素の追加はできません。
辞書への追加は、keyとvalueを指定します。
d = {1:'One', 'a':2, 'Hello':'Python'} d[4] = "4" print(d) # -> {1: 'One', 'a': 2, 'Hello': 'Python', 4: '4'}
集合への追加は、addを使います。
s = set([1, 'a', 'Hello Python']) s.add(4) print(s) # -> {1, 'a', 4, 'Hello Python'}
配列・リストから要素を削除する
リストのインデックスを指定して要素を削除するには、popを使います。
a = [1, 'a', 'Hello Python'] a.pop(0) print(a) # -> ['a', 'Hello Python']
リストの値を指定して要素を削除するには、removeを使います。
a = [1, 'a', 'Hello Python'] a.remove('a') print(a) # -> [1, 'Hello Python']
リストのすべての要素を削除するには、clearを使います。
a = [1, 'a', 'Hello Python'] a.clear() print(a) # -> []
タプルは変更付加のため要素は削除できません。
辞書の要素を削除するには、リストと同様にclearとpopを使うことができます。
それ以外にpopitemを使うことができます。
d = {1:'One', 'a':2, 'Hello':'Python'} d.popitem() print(d) # -> {1: 'One', 'a': 2}
集合の要素を削除するには、リストと同様にpopとremoveを使うことができます。
それ以外に、discardを使うことができます。
s = set([1, 'a', 'Hello Python']) s.discard(1) print(s) # -> {'Hello Python', 'a'}
配列・リストをコピーする
配列をコピーするには、copyとdeepcopyを使う方法があります。
copyは浅いコピーを行います。
a = [1, 'a', 'Hello Python'] r = a.copy() print(r) # -> [1, 'a', 'Hello Python']
deepcopyは深いコピーを行います。
a = [1, 'a', 'Hello Python'] r = copy.deepcopy(a) print(r) # -> [1, 'a', 'Hello Python']
タプルも同様にcopyとdeepcopyを使う方法があります。
t = (1, 'a', 'Hello Python') r = copy.copy(t) print(r) # -> [1, 'a', 'Hello Python']
t = (1, 'a', 'Hello Python') r = copy.deepcopy(t) print(r) # -> [1, 'a', 'Hello Python']
辞書のコピーもcopyとdeepcopyを使う方法があります。
他にもkeyだけをコピーするfromkeysを使う方法もあります。
d = {1:'One', 'a':2, 'Hello':'Python'} r = dict.fromkeys(d) print(r) # -> {1: 'One', 'a': 2, 'Hello': 'Python'}
集合のコピーもcopyとdeepcopyを使う方法があります。
配列・リストをループさせる
リストをループさせるには、通常for-inを使います。
a = [1, 'a', 'Hello Python'] for i in a: print(i) # -> 1 -> a -> Hello Python
for-inで、インデックスを取得しながらループするには、enumerateを使います。
a = [1, 'a', 'Hello Python'] for i, item in enumerate(a): print(i, item) # -> 0 1 -> 1 a -> 2 Hello Python
複数のリストを同時にループさせるには、zipを使います。
a = [1, 'a', 'Hello'] b = [2, 'b', 'Python'] for aa, bb in zip(a, b): print(aa, bb) # -> 1 2 -> a b -> Hello Python
逆順にループさせるには、reversedを使います。
a = [1, 'a', 'Hello Python'] for item in reversed(a): print(item) # -> Hello Python -> a -> 1
タプルもリストと同様の方法でループさせることができます。
辞書のループは、keyをループさせるkeys、valueをループさせるvalues、keyとvalueの両方をループさせるitemsがあります。
d = {1:'One', 'a':2, 'Hello':'Python'} for key in d.keys(): print(key) # -> 1 -> a -> Hello
d = {1:'One', 'a':2, 'Hello':'Python'} for value in d.values(): print(value) # -> One -> 2 -> Python
d = {1:'One', 'a':2, 'Hello':'Python'} for key, value in d.items(): print(key, value) # -> 1 One -> a 2 -> Hello Python
集合のループも、通常のfor-in、enumerate、zipを使うことができます。
配列・リストの順番を入れ替える
リストの要素を入れ替えるには、sortを使います。
a = ['c', 'a', 'b'] a.sort() print(a) # -> ['a', 'b', 'c']
逆順位ソートするには引数にreverse=Trueを指定します。
a = ['c', 'a', 'b'] a.sort(reverse=True) print(a) # -> ['c', 'b', 'a']
配列・リスト同士を結合する
リスト同士の結合は、extendを使います。
a1 = ['a', 'b', 'c'] a2 = ['x', 'y', 'z'] a1.extend(a2) print(a1) # -> ['a', 'b', 'c', 'x', 'y', 'z']
配列・リストを検索する
リストから特定の値を検索するには、indexを使います。
a = ['a', 'b', 'c'] r = a.index('c') print(r) # -> 2
リストに含まれる要素の数を検索するには、countを使います。
a = ['a', 'b', 'c'] r = a.count('c') print(r) # -> 1
配列・リストの操作はやりたい処理によって使うメソッドを変えよう
配列やリストの操作には、同じ結果を得られる方法が、処理を組み合わせることによって何通りもあります。
ですが、特にループの場合には、処理の仕方によってはパフォーマンスが悪いこともあります。
どんなメソッドを使うのかは、やりたい処理によって適宜変えられるように、日頃からたくさん引出しを持っておくことをおすすめします。
今回は、Pythonの配列・リスト操作についてまとめました。
参考になれば幸いです。
コメント