
スポンサーリンク
Pythonのリスト(list)は、複数の要素を格納できる便利なデータ型です。本記事では、リストの基本的な使い方から応用的なテクニックまで解説します。
1. リストの基本
Pythonのリストは、[]
(角括弧)を使って作成します。リスト内には異なるデータ型の要素を含めることができます。
# リストの作成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を挿入します。
# リストの作成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()を活用すると指定したインデックスの要素を削除することができます。
# リストの作成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. リストのスライス
リストのスライスを使うと、リストの一部を取得したり、特定の範囲の要素を抽出できます。
基本的なスライス
# インデックス1から3までの要素を取得(終了インデックスは含まれない)numbers = [1, 2, 3, 4, 5, 6]sub_list = numbers[1:4]print(sub_list) # [2, 3, 4]
ステップを指定したスライス
# 2つおきに要素を取得(開始:終了:ステップ)numbers = [1, 2, 3, 4, 5, 6]step_list = numbers[0:6:2]print(step_list) # [1, 3, 5]
省略形を使ったスライス
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]
逆順にするスライス
numbers = [1, 2, 3, 4, 5, 6]# リストを逆順に取得reversed_list = numbers[::-1]print(reversed_list) # [6, 5, 4, 3, 2, 1]
4. リストの内包表記
リストの内包表記を使うと、簡潔にリストを作成できます。
# 1から10までの平方数リストを作成squares = [x ** 2 for x in range(1, 11)]print(squares) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
5. リストの応用操作
リストの並び替えや検索の方法を紹介します。
並び替え
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]
要素の検索
# リストの作成numbers = [9, 7, 5, 2, 1]# 指定した要素のインデックスを取得index = numbers.index(5)print(index) # 2
# 指定した要素が含まれているか判定exists = 3 in numbersprint(exists) # False
6. リストのコピーと結合
リストをコピーしたり、結合する方法を解説します。
# リストのコピー(シャローコピー)original = [1, 2, 3]copy_list = original[:]print(copy_list) # [1, 2, 3]
# リストの結合list1 = [1, 2, 3]list2 = [4, 5, 6]combined = list1 + list2print(combined) # [1, 2, 3, 4, 5, 6]
7. 多次元リスト
リストの中にリストを含めることで、2次元や3次元のデータ構造を作ることができます。
# 2次元リストmatrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]print(matrix[1][2]) # 6(2行目の3列目)
8. リストのメモリ効率
Pythonのリストは、動的にサイズを変更できる便利なデータ構造ですが、メモリ効率を考慮することも重要です。
リストのメモリ使用量
リストは可変長のデータ構造であり、新しい要素を追加するたびにメモリを再確保することがあります。そのため、リストが大きくなるとメモリ使用量も増加します。
import sys
# リストのメモリ使用量を確認list_example = [i for i in range(1000)]print(sys.getsizeof(list_example)) # リストのメモリサイズ(バイト単位)
ジェネレータを使ったメモリ最適化
リストを使用すると、大量のデータを保持する際にメモリを大量に消費する可能性があります。そこで、ジェネレータを活用することで、メモリ使用量を抑えることができます。
import sys
# リストを使う場合(メモリを多く消費)squares_list = [x ** 2 for x in range(1000000)]print(squares_list[0]) # 0print(squares_list[1]) # 1print(squares_list[2]) # 4print(sys.getsizeof(squares_list)) # メモリサイズ(バイト単位)
# ジェネレータを使う場合(メモリ効率が良い)squares_gen = (x ** 2 for x in range(1000000))print(next(squares_gen)) # 0print(next(squares_gen)) # 1print(next(squares_gen)) # 4print(sys.getsizeof(squares_gen)) # メモリサイズ(バイト単位)
ジェネレータのメリット:
- 遅延評価: 必要なときに値を生成するため、無駄なメモリ消費を防げる。
- スケーラビリティ: 巨大なデータセットを扱う際に有効。
- パフォーマンス向上: メモリ割り当てが不要なため、特定の処理で速度が向上する。
このように、リストとジェネレータを使い分けることで、メモリ効率を向上させることが可能です。
9. タプルと辞書の違い
Pythonでは、リストのほかにタプル(tuple)と辞書(dictionary)というデータ型もあります。それぞれの違いを見ていきましょう。
タプル(Tuple)
タプルは、リストと似ていますが、 変更ができない(イミュータブル) という特徴があります。
# タプルの作成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)
辞書は、キーと値のペアでデータを格納するデータ型です。
# 辞書の作成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"] = 26print(dict_example) # {'name': 'Alice', 'age': 26, 'city': 'Tokyo'}
辞書は、データにラベル(キー)をつけて管理できるため、データを効率的に整理するのに役立ちます。
タプルと辞書の比較
データ型 | 特徴 |
---|---|
リスト | 順序あり・変更可能(ミュータブル) |
タプル | 順序あり・変更不可(イミュータブル) |
辞書 | 順序なし(Python 3.7以降は順序保証)・キーで管理 |
まとめ
Pythonのリストは、柔軟で強力なデータ構造です。本記事で紹介した基本操作を活用し、リストを使いこなしましょう!
以上で本記事の解説を終わります。
よいITライフを!