【Pythonリスト】追加・削除・結合・カウント方法まとめ

【Pythonリスト】追加・削除・結合・カウント方法まとめ

Amazonのアソシエイトとして、ITナレッジライフは適格販売により収入を得ています。

記事の文字数:3,201 / 総アクセス数:175 views

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

Pythonのリスト(list)は、複数の要素を格納できる便利なデータ型です。本記事では、Pythonリストの追加・削除・結合・カウントというキーワードを軸に、リスト操作のあらゆる基本と応用を初心者にもわかりやすく解説します。実践的なサンプルコードとともに、リストの力を最大限に活用する方法を学びましょう。

リスト(list)の基本的な使い方

リストは、複数のデータを一つの変数にまとめて格納できて文字列、数値、他のリストなど、さまざまな型を混在させて扱うことができます。本セクションでリストの要素を作成、追加、削除する方法を紹介します。

リストを作成

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

list-create01.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]

空のリストを作る場合は [] または list() を使います。

list-create02.py
empty_list = []
another_empty = list()
print(empty_list)
print(another_empty)

リストの要素を追加

リストの要素はappend()、insert()、extend()を用いることで追加することができます。

append()の使い方

append(要素名) は、リストの末尾に1つの要素を追加します。

list-insert01.py
fruits = ["apple", "banana"]
fruits.append("cherry")
print(fruits) # ['apple', 'banana', 'cherry']

insert()で任意の位置に挿入

指定した位置に要素を追加したい場合は insert(index, 要素名) を使います。

list-insert02.py
fruits = ["apple", "banana", "cherry"]
fruits.insert(1, "orange")
print(fruits) # ['apple', 'orange', 'banana', 'cherry']

リストの要素を変更

Pythonのリストはミュータブル(変更可能)なデータ構造です。そのため、特定の要素を変更したり、複数の要素を一括で書き換えたりすることができます。

インデックスを指定して要素を変更

リストの特定の位置にある要素を別の値に変更することができます。

list-change01.py
fruits = ["apple", "banana", "cherry"]
fruits[1] = "orange"
print(fruits) # ['apple', 'orange', 'cherry']

リストの要素を削除

Pythonのリストから要素を削除するには、目的や条件に応じていくつかの方法があります。

remove()で特定要素を削除

remove(要素名)は、リスト内で最初に見つかった一致する値を削除します。

list-remove01.py
fruits = ["apple", "banana", "apple", "cherry"]
fruits.remove("apple")
print(fruits) # ['banana', 'apple', 'cherry']

⚠️ 該当要素がないと ValueError が発生するので注意!

pop()で位置を指定して削除

pop(index)は、指定したインデックスの要素を削除し、同時にその値を返す便利なメソッドです。

list-remove02.py
fruits = ["apple", "banana", "cherry"]
removed = fruits.pop(1)
print(removed) # 'banana'
print(fruits) # ['apple', 'cherry']

del文による削除

del を使うと、スライスやインデックスを用いて柔軟に削除できます。

list-remove03.py
fruits = ["apple", "banana", "cherry", "kiwi"]
del fruits[1:3]
print(fruits) # ['apple', 'kiwi']

リストのスライス

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

基本的なスライス

基本的なスライスの使い方は、取得したい要素の範囲を[開始:終了]のように指定します。

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

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

ステップを指定してスライスする場合は[開始:終了:ステップ]のように指定します。

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

省略形を使ったスライス

最初のn要素を取得する場合は[:終了]、n番目以降の要素を取得する場合は[開始:]のように省略した指定方法も可能です。

list-slice03.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]

逆順にするスライス

スライスでリストを逆順に並び替える場合は[::-1]のように指定します。

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

リストの要素数をカウントする

count()の基本

特定の要素がリストに何回出現するかを調べたいときに便利です。

list-count01.py
fruits = ["apple", "banana", "apple", "cherry"]
print(fruits.count("apple")) # 2

len()で全体の要素数を取得

lenでリストの長さ(要素数)を取得することができます。

list-count02.py
fruits = ["apple", "banana", "apple", "cherry"]
print(len(fruits)) # 4

リスト(list)の応用的な使い方

Pythonリストの並び替えや検索の方法など、応用的な使い方を紹介します。

リストの結合

複数のリストを1つにまとめるテクニックを紹介します。

extend()によるリスト結合

リストに複数の要素を追加したい場合は extend() が便利です。

list-join01.py
fruits = ["apple", "banana", "apple", "cherry"]
fruits.extend(["kiwi", "melon"])
print(fruits) # ['apple', 'banana', 'apple', 'cherry', 'kiwi', 'melon']

+演算子を使った結合

簡単にリスト同士を合体させる方法です。

list-join02.py
list1 = [1, 2]
list2 = [3, 4]
combined = list1 + list2
print(combined) # [1, 2, 3, 4]

extend()と+演算子の違い

extend()元のリストを直接変更しますが、+新しいリストを作成します。

list-join03.py
list1 = [1, 2]
list1.extend([3, 4])
print(list1) # [1, 2, 3, 4]
list1 = [1, 2]
list2 = [3, 4]
combined = list1 + list2
print(list1) # [1, 2]
print(list2) # [3, 4]
print(combined) # [1, 2, 3, 4]

リストの内包表記

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

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

リストのソート(並び替え)

list-sort01.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]

リストの要素を検索

in演算子で要素がリスト内に存在するか調べることができます。

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

リストの中にリスト(多次元リスト)

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

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

リストでインデックス付き処理

ループ中にインデックスが欲しいときはenumerate()でforを回します。

list-enumerate01.py
fruits = ["apple", "banana", "cherry"]
for index, fruit in enumerate(fruits):
print(index, fruit)

複数リストを同時処理

複数のリストを一度に処理したい場合はzipを使用します。

list-zip01.py
names = ["Alice", "Bob"]
scores = [90, 85]
for name, score in zip(names, scores):
print(f"{name}: {score}")

リストのメモリ効率

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

リストのメモリ使用量

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

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

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

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

list-mem02.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)) # メモリサイズ(バイト単位)

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

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

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

リストとタプル・辞書の違い

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

リストとタプル(Tuple)の違い

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

list-diff01.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-diff02.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以降は順序保証)・キーで管理

よくあるエラーとその対処法

IndexErrorへの対処

リストの範囲外のインデックスを指定するとエラーになります。

fruits = ["apple"]
print(fruits[1]) # IndexError

対策:インデックスを使う前に len() でチェックしましょう。

TypeError・ValueErrorなど

  • TypeError: appendなどにリスト以外を渡す
  • ValueError: removeで存在しない値を指定

エラー文を読んで冷静に原因を特定しましょう。

FAQ:よくある質問とその回答

Q1: append()extend() の違いは?

A: append() は1要素、extend() は複数要素を追加する。

Q2: remove()pop()はどう使い分ける?

A: 値で削除→remove()、位置で削除→pop()

Q3: 複数のリストを結合するには?

A: +extend()itertools.chain() のいずれかを使う。

Q4: 要素がリスト内に存在するか調べる方法は?

A: "apple" in fruits のように in 演算子を使う。

Q5: 要素数が0のリストを判定するには?

A: if not fruits: または len(fruits) == 0 を使用。

Q6: リストを逆順に並び替えるには?

A: fruits.sort(reverse=True) または fruits[::-1]

Pythonリストまとめ

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

実践コード例:よく使う操作まとめ

fruits = ["apple", "banana"]
fruits.append("cherry")
fruits.insert(1, "orange")
fruits.extend(["kiwi", "melon"])
fruits.remove("banana")
popped = fruits.pop()
count_apple = fruits.count("apple")
total = len(fruits)
print(f"リスト: {fruits}")
print(f"削除された要素: {popped}")
print(f"appleの数: {count_apple}")
print(f"要素数: {total}")

Pythonリストを使いこなすための学習リソース

Pythonユーザにお勧めの本

人気

スッキリわかるPython入門 第2版 スッキリわかるシリーズ

難易度
実用性
読みやすさ

対話形式でスラスラ読める。複雑な概念もキャラクターが分かりやすく解説してくれます。

独習Python

難易度
実用性
網羅性

言語仕様を深く解説。なんとなく書ける状態から、自信を持って書ける状態へ引き上げてくれます。

Python1年生 第2版 体験してわかる!会話でまなべる!プログラミングのしくみ

難易度
実用性
読みやすさ

イラスト中心で、プログラミングの楽しさを教えてくれる。ワクワクしながら学べる入門書です。


以上で本記事の解説を終わります。
よいITライフを!

Pythonユーザにお勧めの本

人気

スッキリわかるPython入門 第2版 スッキリわかるシリーズ

難易度
実用性
読みやすさ

対話形式でスラスラ読める。複雑な概念もキャラクターが分かりやすく解説してくれます。

人気記事


記事を評価

Thanks!
目次
Scroll to Top