Pythonの配列の基礎をご紹介!

プログラミング
Pythonの配列の基礎として、リストとタプルの違いと使い方について紹介します。 リストの要素やサイズの取得、要素の追加・挿入・削除、リストの連結、要素の並べ替え、タプルのサイズの取得、リストとタプルの変換について基礎的な内容を解説します。
Pythonの配列の基礎をご紹介!

Pythonでは配列をどのように扱うのでしょうか。 Pythonの配列であるリストの使い方の中から基礎的なものとして、リストの要素やサイズの取得、要素の追加・挿入・削除などについてまとめました。 また、リストと似た部分が多いタプルについても基礎的な部分を紹介します。

Pythonの配列

Pythonで配列を扱う際にはリストを使います。タプルも配列を扱うことができますが、タプルは要素を変更できないという違いがあります。

リスト

リストの定義は角括弧を使います。 次のように宣言すると、空のリストを作成することができます。

list = []

角括弧の中に要素をコンマで区切って記述することで宣言と同時に初期化することができます。

list_number = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list_chess = ['king', 'queen', 'rook', 'bishop', 'knight', 'pawn']

要素はインデックスと呼ばれる番号が先頭から0,1,2,……と割り当てられており、

リスト名[インデックス]

で指定したインデックスの要素を取得できます。 また、インデックスには負の値を指定することも可能で、-1なら最後の要素、-2なら最後から2番目の要素……となります。

【使用例】
list_number = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print list_number[0]
print list_number[1]
print list_number[-1]

【実行結果】
0
1
9

【注意 print文について】

Python2系ではprint文で出力しますが、Python3系ではprint関数で出力します。
本記事はPython2系のprint文で解説していますので、Python3系を利用する場合は下記のように括弧を補ってprint関数として読みかえてください。

<Python2系>
print list_number[0]

<Python3系>
print(list_number[0])

タプル

リストの要素は変更することはできますが、タプルの要素は変更することはできません。 プログラム内で変更したくない変数を定義する場合に便利です。 丸括弧の中に要素をコンマで区切って記述することで宣言と同時に初期化することができます。

tuple_number = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
tuple_chess = ('king', 'queen', 'rook', 'bishop', 'knight', 'pawn')

要素が1つだけのときは最後にコンマをつける必要があります。

tuple_ok = (0,)
tuple_ng = (0)

この場合コンマがないとタプルの要素ではなく数値の0として扱われることになります。

タプル名[インデックス] で指定したインデックスの要素を取得でき、インデックスには負の値を指定できるのもリストと同じです。

【使用例】
tuple_number = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
print tuple_number[0]
print tuple_number[1]
print tuple_number[-1]

【実行結果】
0
1
9

リストで配列を扱う

Pythonで配列を扱う際に使うリストの使い方を見てみましょう。

サイズを取得する

len関数を使うとリストの要素の数を取得することができます。

len(リスト名)

【使用例】
list_number = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print len(list_number)

【実行結果】
10

リストの一部を取得する

スライスという機能を使うとリストの一部を取得することができます。

リスト名[開始インデックス:終了インデックス] 開始インデックスから終了インデックスの手前までの要素を取得します。 開始インデックスと終了インデックスには負の値を指定することも可能です。 開始インデックスを省略すると最初の要素から取得し、終了インデックスを省略すると最後の要素まで取得します。

【使用例】
list_number = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print list_number[1:5]
print list_number[1:-5]
print list_number[-5:9]
print list_number[:5]
print list_number[5:]
print list_number[:-5]
print list_number[-5:]
print list_number[:]

【実行結果】
[1, 2, 3, 4]
[1, 2, 3, 4]
[5, 6, 7, 8]
[0, 1, 2, 3, 4]
[5, 6, 7, 8, 9]
[0, 1, 2, 3, 4]
[5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

要素を変更する

指定したインデックスの要素を置き換えることができます。

リスト名[インデックス] = 置き換えたい要素

【使用例】
list_number = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list_number[0] = 10
print list_number

【実行結果】
[10, 1, 2, 3, 4, 5, 6, 7, 8, 9]

スライスを使うこともできます。
リスト名[開始インデックス:終了インデックス] = 置き換えたいリスト

【使用例】
list_number = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list_number[0:5] = [10, 11, 12, 13, 14]
print list_number

【実行結果】
[10, 11, 12, 13, 14, 5, 6, 7, 8, 9]

置き換えられる要素の数と置き換える要素の数が違っていても置き換えることができます。

【使用例】
list_number = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list_number[0:2] = [10, 11, 12, 13, 14]
print list_number

【実行結果】
[10, 11, 12, 13, 14, 2, 3, 4, 5, 6, 7, 8, 9]

要素を追加する

appendメソッドを使うとリストの最後に要素を追加することができます。

リスト名.append(追加したい要素)

【使用例】
list_number = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list_number.append(10)
print list_number

【実行結果】
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

extendメソッドを使うとリストの最後に別のリストの要素を追加することができます。

リスト名.extend(追加したいリスト)

【使用例】
list_number.extend([10, 11])
print list_number

【実行結果】
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

リストを連結する

+演算子を使うとリストを結合することができます。

【使用例】
list_new = [0, 1, 2, 3, 4] + [5, 6, 7, 8, 9]
print list_new

【実行結果】
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

要素を挿入する

insertメソッドを使うと指定したインデックスの要素の直前に要素を挿入することができます。

リスト名.insert(インデックス, 挿入したい要素)

【使用例】
list_number = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list_number.insert(1, 10)
print list_number

【実行結果】
[0, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9]

スライスを使って要素を変更する方法がありましたが、開始インデックスと終了インデックスを同じ値にすると要素を挿入することができます。

【使用例】
list_string= ['A', 'a', 'B', 'b']
list_string[2:2] = '0'
print list_string

【実行結果】
['A', 'a', '0', 'B', 'b']

要素を削除する

del文を使うとリストを削除することができます。

del リスト名[インデックス]

【使用例】
list_number = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
del list_number[1]
print list_number

【実行結果】
[0, 2, 3, 4, 5, 6, 7, 8, 9]

スライスを使うと削除する範囲を指定することもできます。

del リスト名[開始インデックス:終了インデックス]

【使用例】
list_number = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
del list_number[1:5]
print list_number

【実行結果】
[0, 5, 6, 7, 8, 9]

popメソッドを使うと指定したインデックスの要素を削除することができます。

リスト名.pop(インデックス)

【使用例】
list_number = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list_number.pop(1)
print list_number

【実行結果】
[0, 2, 3, 4, 5, 6, 7, 8, 9]

インデックスを省略すると最後の要素が削除されます。

【使用例】
list_number = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list_number.pop()
print list_number

【実行結果】
[0, 1, 2, 3, 4, 5, 6, 7, 8]

removeメソッドを使うと指定した値を持つ要素を削除することができます。 リストに同じ値を持つ要素が複数ある場合は、最初の要素を削除します。

リスト名.remove(削除する値)

【使用例】
list_number2 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
list_number2.remove(0)
print list_number2

【実行結果】
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]

スライスで指定した範囲に空リストを代入する方法もあります。

【使用例】
list_number = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list_number[1:5] = []
print list_number

【実行結果】
[0, 5, 6, 7, 8, 9]

要素が含まれているか調べる

in演算子を使うと指定した値が要素に含まれているかどうかを調べることができます。
含まれている場合はTrueを返し、含まれていない場合はFalseを返します。
not in演算子を使った場合は逆で、含まれていない場合はTrue、含まれている場合はFalseとなります。

調べる値 in リスト名 調べる値 not in リスト名

【使用例】
list_number = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print 1 in list_number
print 10 in list_number
print 1 not in list_number
print 10 not in list_number

【実行結果】
True
False
False
True

indexメソッドを使うと指定した値の要素のインデックスを取得することができます。 リストに同じ値を持つ要素が複数ある場合は、最初の要素のインデックスを取得します。

リスト名.index(調べる値)

【使用例】
list_number2 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print list_number2.index(0)

【実行結果】
0

countメソッドを使うと指定した値を持つ要素がいくつ含まれるかを取得することができます。

リスト名.count(調べる値)

【使用例】
list_number2 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print list_number2.count(0)

【実行結果】
2

要素を並べ替える

sortメソッドを使うと要素を昇順に並び替えることができます。

リスト名.sort()

数値であれば数値が小さい順、文字列であれば文字コード順になります。

【使用例】
list_number3 = [1, 11, 2, 12]
list_number3.sort()
print list_number3

【実行結果】
[1, 2, 11, 12]
【使用例】
list_string = ['A', 'a', 'B', 'b']
list_string.sort()
print list_string

【実行結果】
['A', 'B', 'a', 'b']

reverseメソッドを使うと要素を逆に並び替えることができます。

リスト名.reverse()

【使用例】
list_number3 = [1, 11, 2, 12]
list_number3.reverse()
print list_number3

【実行結果】
[12, 2, 11, 1]
【使用例】
list_string = ['A', 'a', 'B', 'b']
list_string.reverse()
print list_string

【実行結果】
['b', 'B', 'a', 'A']

sortメソッドを実行してからreverseメソッドを実行すると降順に並び替えることができます。

【使用例】
list_number3 = [1, 11, 2, 12]
list_number3.sort()
list_number3.reverse()
print list_number3

【実行結果】
[12, 11, 2, 1]
【使用例】
list_string = ['A', 'a', 'B', 'b']
list_string.sort()
list_string.reverse()
print list_string

【実行結果】
['b', 'a', 'B', 'A']

タプルで配列を扱う

Pythonで配列を扱う際に使うタプルの使い方を見てみましょう。

サイズを取得する

len関数を使うとタプルの要素の数を取得することができます。

len(タプル名)

【使用例】
tuple_number = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
print len(tuple_number)

【実行結果】
10

タプルの一部を取得する

リストのときと同様に、スライスを使ってタプルの一部を取得することができます。

【使用例】
tuple_number = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
print tuple_number[1:5]
print tuple_number[1:-5]
print tuple_number[-5:9]
print tuple_number[:5]
print tuple_number[5:]
print tuple_number[:-5]
print tuple_number[-5:]
print tuple_number[:]

【実行結果】
(1, 2, 3, 4)
(1, 2, 3, 4)
(5, 6, 7, 8)
(0, 1, 2, 3, 4)
(5, 6, 7, 8, 9)
(0, 1, 2, 3, 4)
(5, 6, 7, 8, 9)
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

タプルを連結する

+演算子を使うとタプルを結合することができます。

【実行結果】
tuple_new = (0, 1, 2, 3, 4) + (5, 6, 7, 8, 9)
print tuple_new

【実行結果】
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

リストとタプルを変換する

tuple関数を使うとリストをタプルに変換することができます。

tuple(リスト)

【使用例】
print tuple([0, 1])

【実行結果】
(0, 1)

list関数を使うとタプルをリストに変換することができます。

list(タプル)

【使用例】
print list((0, 1))

【実行結果】
[0, 1]

まとめ

Pythonのリストとタプルについての基礎と、リストとタプルに対する演算子・関数・メソッドを使った操作について紹介しました。

「ここをこう変えたらどう動くだろうか」、「これとこれを組み合わせたらこういうことができそうだ」と実際に試してみて使いこなせるようにしていきましょう。


TECH PLAYでは、エンジニアの方向けに勉強会・イベント情報を提供しています。
ご興味のある方はぜひご参加ください。


おすすめのコラム