Pythonの配列の初期化、結合、削除、長さ取得など13つの方法を解説する

スポンサーリンク

この記事では、Pythonの配列を作り方や処理方法を解説していきます。

スポンサーリンク

そもそも、Pythonに配列はあるの?

結論から言うと、Pythonのarrayモジュールを使えば、整数、浮動小数点、Unicode文字用の配列を作成することができます

Pythonはデフォルトでは、配列のデータ構造を持っていません

多くの場合は、配列と同じことがリストで行うことができるからです。

リストはアイテムのコレクションを含み、追加/更新/削除/検索などの処理ができます。

配列は整数だったら整数だけ、文字列だったら文字列だけを要素に入れることができますが、Pythonのリストは異なる型の要素を入れることができます。

つまり、リストの方が配列よりも柔軟に扱えることが多いのです。

Python arrayモジュール

Pythonのarrayモジュールは、「整数だけしか要素に入れない」等の様に、データ型に制約のある配列を作成することができます

詳しくは後述しますが、Pythonで配列を作成する時はarray.array("i", [1, 3, 4])の様に、第1引数に配列の型を入れて、第2引数に配列となるリストを入れます。

(どのような型が使えるかは、公式ドキュメントが詳しいです)

そのため、arrayモジュールを使って整数とか浮動小数点数の配列を作成することができます

さっそくarrayモジュールが提供するすべての操作を見てみましょう。

1. 配列の作成

配列を作成する際には、arrayモジュールをインポートした後に、array.array(typecode, values_list)を使います。

import array

# 配列の作成
int_array = array.array('i', [ 1 , 2 , 3 , 4])

float_array = array.array('f', [ 1.1 , 2.2 , 3.3 , 4.4])

# ユニコード文字列
unicode_array = array.array('u', ['u0394' ,'u2167' ,'u007B'])

2. 配列とその型を出力する

配列オブジェクトを表示すると、型の情報とその要素に関する情報を得ることができます。

上で作成した配列を出力し、さらに組み込み関数のtype()を使ってオブジェクトの型を出力してみましょう。

# printing array
print(int_array)
print(float_array)
print(unicode_array)
print(type(int_array))

結果は以下の様になります。

array('i', [ 1 , 2 , 3 , 4])
array('f', [ 1.100000023841858 , 2.200000047683716 , 3.299999952316284 , 4.400000095367432])
array('u','ΔⅧ{')

3. 配列の要素にアクセスする

forループを使って、配列の要素を表示することができます

import array

int_array = array.array('i', [ 1 , 2 , 3 , 4])

for a in int_array:
    print(a)

また、インデックスを使用して要素にアクセスすることもできます

インデックスを使用して、配列の要素を表示することができます

for b in range(0 , len(int_array)):
    print(f'int_array[{b}] = {int_array[b]}')

結果は以下の通り

int_array[0] = 1
int_array[1] = 2
int_array[2] = 3
int_array[3] = 4

4. 配列に要素の挿入と追加をする

Pythonの配列は、insert()メソッドを使用すると、指定したインデックスに要素を挿入することができます

指定されたインデックスからの要素は、1つ右にシフトされます。

int_array = array.array('i', [ 1 , 2 , 3 , 4])
int_array.insert(0 , -1) # -1,1,2,3,4
int_array.insert(2 , -2) # -1,1,-2,2,3,4
print(int_array)

結果は、以下の通りになります。

('i', [-1, 1, -2, 2, 3, 4])

配列の末尾に要素を追加する場合は、append()メソッドを使用します。

int_array = array.array('i', [ 1 , 2 , 3 , 4])
int_array.append(-3)
print(int_array) # array('i', [1, 2, 3, 4, -3])

5. マイナスのインデックスを使って配列の要素にアクセス「

配列のインデックスにマイナスを使う事で、配列の末尾から何番目かの要素にアクセスできます。

以下のコードの例を見てもらうと分かりやすいです。

int_array = array.array('i', [ 10 , 20 , 30 , 40 , 50 , 60 , 70 , 80])
print(int_array[-2]) # 70
print(int_array[-5]) # 40

6. 配列の要素の削除

配列の要素を削除するには、remove() メソッドを使用します。

int_array = array.array('i', [ 1 , 2 , 3 , 4])
int_array.remove(2)
print(int_array) # array('i', [1, 3, 4])

要素が配列に存在しない場合、ValueErrorが発生します。

int_array = array.array('i', [ 1 , 2 , 3 , 4])
try:
    int_array.remove(20)
except ValueError as ve:
    print(ve)

結果は、以下の通りになります。

上記の例では例外が発生するはずです。

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

このメソッドは、戻り値として配列から削除される要素を返します。

インデックスを指定しない場合は、最後の要素が削除されて返されます。

int_array = array.array('i', [ 1 , 2 , 3 , 4])

last_element = int_array.pop()

print(last_element) # 4
print(int_array) # array('i', [1, 2, 3])

second_element = int_array.pop(1)

print(second_element) # 2
print(int_array) # array('i', [1, 3])

7. 配列をslice(スライス)で部分的に取得する

Pythonの配列はスライスをサポートしており、サブ要素を含む新しい配列を返します

元の配列は変更されません

また、スライスは負のインデックスをサポートしています。

int_array = array.array('i', [ 0 , 1 , 2 , 3 , 4 , 5])

print(int_array[3:])# array('i', [3, 4, 5])
print(int_array[:2])# array('i', [0, 1])
print(int_array[1:3])# array('i', [1, 2])

# マイナスのインデックスのスライス
print(int_array[-2:]) # array('i', [4, 5])
print(int_array[:-2]) # array('i', [0, 1, 2, 3])

8. 配列の要素を検索する

index()メソッドを使うと、ある要素が最初に出現するインデックスを見つけることができます

もしその要素が配列に存在しない場合は、ValueError が発生します。

int_array = array.array('i', [ 0 , 1 , 2 , 3 , 1 , 2])

print(f'1 is found at index {int_array.index(1)}')
try:
          print(int_array.index(20))
except ValueError as ve:
          print(ve)

結果は以下の通りでうs

1 is found at index 1
array.index(x): x not in array

9. 指定したインデックスの値を更新する

配列のインデックスを代入演算子で使用して、インデックスにある値を更新することができます

インデックスが無効な場合、IndexError が発生します。

int_array = array.array('i', [ 0 , 1 , 2 , 3 , 1 , 2])
int_array[0] = -1
int_array[1] = -2

print(int_array)

try:
    int_array[ 10 ] =- 10
except IndexError as ie:
    print(ie)

結果は以下の通りです

array('i', [-1 , -2 , 2 , 3 , 1 , 2])
array assignment index out of range

10. 配列を判定させる

reverse()メソッドを使って、配列の要素を反転させることができます。

int_array = array.array('i', [ 0 , 1 , 2 , 3])
int_array.reverse()
print(int_array) # array('i', [3, 2, 1, 0])

11. ある要素の出現回数を取得する

count()メソッドを使用して、配列内のある値の出現回数を取得することができます

int_array = array.array('i', [ 0 , 1 , 1 , 0])
print(int_array.count(1)) # 2
print(int_array.count(10)) # 0

12. 配列同士を結合させる

extend()関数を使うと、イテレートから配列の末尾に値を追加することができます

array1 = array.array('i', [ 0 , 1])
array2 = array.array('i', [ 2 , 3 , 4])

array1.extend(array2)

print(array1) # array('i', [0, 1, 2, 3, 4])
print(array2) # array('i', [2, 3, 4])

array2.extend([1 , 2])

print(array2) # array('i', [2, 3, 4, 1, 2])

array1 = array.array('i', [ 1])
array1.extend(set([0 , 0 , 0 , 2]))

print(array1) # array('i', [1, 0, 2])

13. 配列からリストへの変換

tolist()メソッドを使うと、配列をリストに変換することができます

int_array = array.array('i', [ 0 , 1 , 2 , 3])
print(int_array.tolist()) # [0, 1, 2, 3]
タイトルとURLをコピーしました