【Python】リストの使い方を解説!タプル・辞書型との違いは?

【Python】リストの使い方を解説!タプル・辞書型との違いは?

記事の文字数:1585

Pythonのリストについて、追加や削除などの基本操作から応用的な使い方、スライスやメモリ効率の最適化まで詳しく解説します。要素の追加・削除・変更、リスト内包表記やタプルや辞書との違いを比較し、それぞれの特徴や活用方法を紹介します。


スポンサーリンク

Pythonのリスト(list)は、複数の要素を格納できる便利なデータ型です。本記事では、リストの基本的な使い方から応用的なテクニックまで解説します。

1. リストの基本

Pythonのリストは、[](角括弧)を使って作成します。リスト内には異なるデータ型の要素を含めることができます。

list-ex01.py
# リストの作成
numbers = [1, 2, 3, 4, 5]
mixed_list = [1, "apple", 3.5, True]
print(numbers) # [1, 2, 3, 4, 5]
print(mixed_list) # [1, 'apple', 3.5, True]

2. リストの操作

リストの要素を追加、削除、変更する方法を紹介します。

要素の追加(append())

append()で要素を末尾に追加し、insert()でインデックス2の位置に10を挿入します。

list-ex02.py
# リストの作成
numbers = [1, 2, 3, 4, 5]
# append()で要素を末尾に追加
numbers.append(6)
print(numbers) # [1, 2, 3, 4, 5, 6]
# insert()で指定位置に追加
numbers.insert(2, 10)
print(numbers) # [1, 2, 10, 3, 4, 5, 6]

要素の削除(remove(), pop())

remove()で特定の要素を削除することができ、pop()を活用すると指定したインデックスの要素を削除することができます。

list-ex03.py
# リストの作成
numbers = [1, 2, 10, 3, 4, 5, 6]
# remove()で特定の要素を削除
numbers.remove(10)
print(numbers) # [1, 2, 3, 4, 5, 6]
# pop()で指定したインデックスの要素を削除
numbers.pop(2)
print(numbers) # [1, 2, 4, 5, 6]

3. リストのスライス

リストのスライスを使うと、リストの一部を取得したり、特定の範囲の要素を抽出できます。

基本的なスライス

list-ex04-1.py
# インデックス1から3までの要素を取得(終了インデックスは含まれない)
numbers = [1, 2, 3, 4, 5, 6]
sub_list = numbers[1:4]
print(sub_list) # [2, 3, 4]

ステップを指定したスライス

list-ex04-2.py
# 2つおきに要素を取得(開始:終了:ステップ)
numbers = [1, 2, 3, 4, 5, 6]
step_list = numbers[0:6:2]
print(step_list) # [1, 3, 5]

省略形を使ったスライス

list-ex04-3.py
numbers = [1, 2, 3, 4, 5, 6]
# 最初の3要素を取得
first_three = numbers[:3]
print(first_three) # [1, 2, 3]
# 3番目以降の要素を取得
last_part = numbers[3:]
print(last_part) # [4, 5, 6]
# リスト全体をコピー(新しいリストを作成)
copy_list = numbers[:]
print(copy_list) # [1, 2, 3, 4, 5, 6]

逆順にするスライス

list-ex04-4.py
numbers = [1, 2, 3, 4, 5, 6]
# リストを逆順に取得
reversed_list = numbers[::-1]
print(reversed_list) # [6, 5, 4, 3, 2, 1]

4. リストの内包表記

リストの内包表記を使うと、簡潔にリストを作成できます。

list-ex05.py
# 1から10までの平方数リストを作成
squares = [x ** 2 for x in range(1, 11)]
print(squares) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

5. リストの応用操作

リストの並び替えや検索の方法を紹介します。

並び替え

list-ex06.py
numbers = [5, 2, 9, 1, 7]
numbers.sort() # 昇順にソート
print(numbers) # [1, 2, 5, 7, 9]
numbers.sort(reverse=True) # 降順にソート
print(numbers) # [9, 7, 5, 2, 1]

要素の検索

list-ex07.py
# リストの作成
numbers = [9, 7, 5, 2, 1]
# 指定した要素のインデックスを取得
index = numbers.index(5)
print(index) # 2
# 指定した要素が含まれているか判定
exists = 3 in numbers
print(exists) # False

6. リストのコピーと結合

リストをコピーしたり、結合する方法を解説します。

list-ex08.py
# リストのコピー(シャローコピー)
original = [1, 2, 3]
copy_list = original[:]
print(copy_list) # [1, 2, 3]
# リストの結合
list1 = [1, 2, 3]
list2 = [4, 5, 6]
combined = list1 + list2
print(combined) # [1, 2, 3, 4, 5, 6]

7. 多次元リスト

リストの中にリストを含めることで、2次元や3次元のデータ構造を作ることができます。

list-ex09.py
# 2次元リスト
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(matrix[1][2]) # 6(2行目の3列目)

8. リストのメモリ効率

Pythonのリストは、動的にサイズを変更できる便利なデータ構造ですが、メモリ効率を考慮することも重要です。

リストのメモリ使用量

リストは可変長のデータ構造であり、新しい要素を追加するたびにメモリを再確保することがあります。そのため、リストが大きくなるとメモリ使用量も増加します。

list-ex10.py
import sys
# リストのメモリ使用量を確認
list_example = [i for i in range(1000)]
print(sys.getsizeof(list_example)) # リストのメモリサイズ(バイト単位)

ジェネレータを使ったメモリ最適化

リストを使用すると、大量のデータを保持する際にメモリを大量に消費する可能性があります。そこで、ジェネレータを活用することで、メモリ使用量を抑えることができます。

list-ex11.py
import sys
# リストを使う場合(メモリを多く消費)
squares_list = [x ** 2 for x in range(1000000)]
print(squares_list[0]) # 0
print(squares_list[1]) # 1
print(squares_list[2]) # 4
print(sys.getsizeof(squares_list)) # メモリサイズ(バイト単位)
# ジェネレータを使う場合(メモリ効率が良い)
squares_gen = (x ** 2 for x in range(1000000))
print(next(squares_gen)) # 0
print(next(squares_gen)) # 1
print(next(squares_gen)) # 4
print(sys.getsizeof(squares_gen)) # メモリサイズ(バイト単位)

ジェネレータのメリット:

  • 遅延評価: 必要なときに値を生成するため、無駄なメモリ消費を防げる。
  • スケーラビリティ: 巨大なデータセットを扱う際に有効。
  • パフォーマンス向上: メモリ割り当てが不要なため、特定の処理で速度が向上する。

このように、リストとジェネレータを使い分けることで、メモリ効率を向上させることが可能です。

9. タプルと辞書の違い

Pythonでは、リストのほかにタプル(tuple)と辞書(dictionary)というデータ型もあります。それぞれの違いを見ていきましょう。

タプル(Tuple)

タプルは、リストと似ていますが、 変更ができない(イミュータブル) という特徴があります。

list-ex12.py
# タプルの作成
tuple_example = (1, 2, 3, "apple")
print(tuple_example) # (1, 2, 3, 'apple')
# インデックスでアクセス可能
print(tuple_example[1]) # 2
# 要素の変更は不可(エラーになる)
tuple_example[1] = 10 # TypeError: 'tuple' object does not support item assignment

タプルは、データの変更を防ぎたい場合や、辞書のキーとして使用する場合に便利です。

辞書(Dictionary)

辞書は、キーと値のペアでデータを格納するデータ型です。

list-ex13.py
# 辞書の作成
dict_example = {"name": "Alice", "age": 25, "city": "Tokyo"}
print(dict_example) # {'name': 'Alice', 'age': 25, 'city': 'Tokyo'}
# 値の取得
print(dict_example["name"]) # Alice
# 値の変更
dict_example["age"] = 26
print(dict_example) # {'name': 'Alice', 'age': 26, 'city': 'Tokyo'}

辞書は、データにラベル(キー)をつけて管理できるため、データを効率的に整理するのに役立ちます。

タプルと辞書の比較

データ型特徴
リスト順序あり・変更可能(ミュータブル)
タプル順序あり・変更不可(イミュータブル)
辞書順序なし(Python 3.7以降は順序保証)・キーで管理

まとめ

Pythonのリストは、柔軟で強力なデータ構造です。本記事で紹介した基本操作を活用し、リストを使いこなしましょう!


以上で本記事の解説を終わります。
よいITライフを!
スポンサーリンク
Scroll to Top