第8章: コレクションと配列の操作

8-collection-array

この章では、Pythonのコレクション(リスト、辞書、セット、タプル)や配列の操作方法について学びます。これらのデータ構造は、データのグループを効率的に管理し、操作するために使用されます。また、forループやwhileループと組み合わせて、データの処理を自動化する方法についても解説します。

目次

8.1 配列の定義と初期化、要素のアクセス方法

Pythonには、専用の配列型はありませんが、リスト(list)が同様の機能を提供します。リストは、複数の要素を保持できるデータ構造で、各要素にはインデックス(位置)を使ってアクセスできます。

リストの定義と要素のアクセス

# リストの定義
numbers = [1, 2, 3, 4, 5]

# 要素のアクセス
print(numbers[0])  # 1インデックス0の要素
print(numbers[3])  # 4インデックス3の要素

リストは、ゼロから始まるインデックスでアクセスします。リスト内の要素は変更可能です。

要素の変更と追加

# 要素の変更
numbers[1] = 10
print(numbers)  # [1, 10, 3, 4, 5]

# 要素の追加
numbers.append(6)
print(numbers)  # [1, 10, 3, 4, 5, 6]

8.2 多次元配列とジャグ配列の使い分け

Pythonでは、リストのリストを使って多次元配列を表現できます。これは、行と列を持つデータ(例:行列)を扱う際に便利です。

多次元リストの例

# 2次元リスト行列の定義
matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

# 要素のアクセス
print(matrix[0][1])  # 2(1行2列目の要素

多次元リストでは、複数のインデックスを使用して要素にアクセスします。ジャグ配列(異なる長さの行を持つ配列)も同じリスト構造で表現できます。

ジャグ配列の例

# ジャグ配列行の長さが異なるリスト
jagged_array = [
    [1, 2, 3],
    [4, 5],
    [6]
]

# 要素のアクセス
print(jagged_array[1][1])  # 5

8.3 List, Dictionary, Queue, Stackの基本操作

Pythonには、さまざまなコレクション型があります。それぞれに特化した操作方法があります。

リスト(list

リストは、可変長のシーケンス型で、要素の追加、削除、検索などが可能です。

fruits = ["apple", "banana", "cherry"]
fruits.append("orange")  # 要素の追加
print(fruits)  # ['apple', 'banana', 'cherry', 'orange']

辞書(dict

辞書は、キーと値のペアを持つデータ構造で、データをキーで管理します。

person = {"name": "Alice", "age": 30}
print(person["name"])  # "Alice"

# 新しいキーと値を追加
person["city"] = "New York"
print(person)  # {'name': 'Alice', 'age': 30, 'city': 'New York'}

キュー(queue

Pythonではリストを使ってキューを実装できますが、collectionsモジュールのdequeを使うと効率的です。キューはFIFO(先入れ先出し)のデータ構造です。

from collections import deque

queue = deque(["Alice", "Bob", "Charlie"])
queue.append("David")  # 要素の追加
print(queue.popleft())  # 最初の要素を取り出す"Alice"

スタック(stack

スタックはLIFO(後入れ先出し)のデータ構造です。リストを使ってスタックを実装できます。

stack = []
stack.append("item1")  # 要素を積む
stack.append("item2")
print(stack.pop())  # "item2"を取り出す

8.4 LINQを使ったデータの操作 (Where, Select, OrderByなど)

PythonにはLINQのようなクエリ構文はありませんが、リスト内包表記やfiltermapsorted関数を使って同様の操作が可能です。

filterによるデータのフィルタリング

numbers = [1, 2, 3, 4, 5, 6]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)  # [2, 4, 6]

mapによるデータの変換

squared_numbers = list(map(lambda x: x**2, numbers))
print(squared_numbers)  # [1, 4, 9, 16, 25, 36]

sortedによるデータの並べ替え

sorted_numbers = sorted(numbers, reverse=True)
print(sorted_numbers)  # [6, 5, 4, 3, 2, 1]

8.5 コレクションの反復処理 (foreachループ)

Pythonのforループは、リストや辞書、セットなどのコレクションを反復処理するために使用されます。

リストの反復処理

fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
    print(fruit)

辞書の反復処理

person = {"name": "Alice", "age": 30, "city": "New York"}
for key, value in person.items():
    print(f"{key}: {value}")

8.6 配列やコレクションのその他の操作

Pythonのコレクションには、以下のような便利な操作があります。

スライス: リストの一部を抽出する

numbers = [1, 2, 3, 4, 5]
print(numbers[1:4])  # [2, 3, 4]

リストの結合: 2つのリストを結合する

list1 = [1, 2, 3]
list2 = [4, 5, 6]
combined = list1 + list2
print(combined)  # [1, 2, 3, 4, 5, 6]

要素の削除: removepopを使ってリストから要素を削除

numbers = [1, 2, 3, 4]
numbers.remove(3)  # 値3を削除
print(numbers)  # [1, 2, 4]

まとめ

この章では、Pythonの基本的なコレクションと配列の操作について学びました。リスト、辞書、キュー、スタックの使い方や、コレクションを操作するための関数について理解することで、データの管理や処理がより効率的に行えるようになります。次の章では、ファイル操作と入出力について詳しく見ていきます。

目次