Pythonの配列・リスト操作【プログラミング初心者向け教材】

プログラミング

プログラミングで文字列操作と同じくらいよく扱うのが、配列やリストの操作です。

複数のデータを管理する配列やリストには、様々な種類があり、用途に応じて使い分けることが重要となります。

本記事では、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の配列・リスト操作についてまとめました。

参考になれば幸いです。

コメント

タイトルとURLをコピーしました