
はじめに
Pythonを学びはじめると、よく登場するのが「リスト(list)」というデータ型です。
リストについて「リストって配列と同じ?」「sort() と sorted() はどう使い分けるの?」といった疑問を持つ方も少なくありません。
この記事では、Pythonのリストを基礎から応用までしっかり理解できるように、初心者が悩みやすいポイントを一つずつ丁寧に解説します。リストの基本をしっかり学び、Pythonの世界をひろげていきましょう。
Pythonのリスト(list)とは
Pythonでは、リスト(list)は複数のデータをまとめて扱えるデータ型で、他の言語でいう「配列(array)」の役割を担います。要素を自由に追加・削除できる柔軟な構造であり、日常的なデータ処理に最も多く使われます。
リストは [] を使って定義し、その中に値(要素)を格納します。各要素には「インデックス」という番号が自動的に付けられ、0から順に数えます。
sample_list = ["A", "B", "C", "D", "E"]
このとき、要素とインデックスの対応関係は次のとおりです。
| index | 0 | 1 | 2 | 3 | 4 または -1 |
|---|---|---|---|---|---|
| 要素 | A | B | C | D | E |
インデックスは先頭が0から始まり、末尾の要素には -1 のように負のインデックスでもアクセスできます。たとえば sample_list[-1] は最後の要素 "E" を取得します。
リストと他言語の配列(array)の違い
Pythonのリストは、他の言語にある「固定長の配列」と異なり、サイズを自由に変えられる可変長構造です。数値・文字列・オブジェクトなど、異なる型のデータを同時に保持できる点も特徴です。
| 比較項目 | Pythonのリスト | 他言語の配列(array) |
|---|---|---|
| サイズ | 可変長(自由に増減) | 固定長(あらかじめ指定) |
| 型の制約 | 異なる型を混在できる | 同一型のみ格納可能 |
| 宣言方法 | [] または list() | 言語によって異なる |
| 主な用途 | 一般的なデータ管理 | 数値処理など特化用途 |
このように、Pythonでは配列という専用構文が存在せず、listが配列の役割を果たすと覚えておくと理解しやすいでしょう。
Pythonのリストの宣言方法
Pythonでは、リストの宣言(定義)方法は主に [] と list() の2通りあります。
どちらも同じようにリストを作成できますが、使いどころや書き方の違いを理解しておくと便利です。
[]を使った宣言方法
[] を使うと、もっともシンプルにリストを定義できます。
# 空のリストを宣言
empty_list = []
# 初期値を与えたリストを定義
sample_list = ["A", "B", "C", "D", "E"]
print(sample_list) # 出力結果: ['A', 'B', 'C', 'D', 'E']
角括弧 [] は、Pythonでリストを表す基本的な構文です。あとから値を追加したい場合は空のリストを定義し、はじめから値を入れたい場合は初期値を指定します。
list()を使った宣言方法
list() は、関数を使ってリストを作る方法です。他のデータ型(タプルや文字列など)をリストに変換したいときにも使われます。
# 空のリストを定義
empty_list = list()
# 初期値を与えたリストを定義
sample_list = list(("A", "B", "C", "D", "E"))
print(sample_list) # 出力結果: ['A', 'B', 'C', 'D', 'E']
[]とlist()の使い分け
実務や学習の場面では、[] を使うケースが一般的です。理由は、記述が短く読みやすいためです。list() は、以下のように「別のデータ型をリスト化したいとき」に使うのが自然です。
# 文字列を1文字ずつ分解してリスト化
chars = list("ABC")
print(chars) # ['A', 'B', 'C']
# タプルをリストに変換
data = list(("A", "B", "C"))
print(data) # ['A', 'B', 'C']
使い分けの基本は次のとおりです。
- 新しくリストを作るとき →
[] - 他のデータ型をリストにしたいとき →
list()
次に、ここで定義したリストを使って「要素の取得」「追加」「削除」など、実際の操作方法を見ていきましょう。
listの操作のメソッドと関数
Pythonのリスト(list型)には、要素の追加・削除・検索・並び替えなどを簡単に行うための多くのメソッドが用意されています。
ここでは、初心者がまず覚えておくべき基本的な操作メソッドと、あわせてよく使われる演算子をまとめます。
主なlistメソッド一覧
リストに対して最もよく使われるメソッドをまとめました。これらを使いこなすことで、リスト内のデータを柔軟に操作できるようになります。
| メソッド | 役割(できること) |
|---|---|
append() | リストの末尾に要素を1つ追加する |
insert() | 指定した位置(インデックス)に要素を挿入する |
clear() | リストのすべての要素を削除する(空リストにする) |
remove() | 指定した値に一致する要素を削除する |
pop() | 指定したインデックスの要素を削除し、その値を返す |
index() | 指定した値が最初に現れる位置(インデックス)を返す |
len() | リストの要素数を数える(長さを返す) |
extend() | 他のリストや要素をまとめて追加する |
sort() | リストの要素を昇順または降順に並び替える |
リスト操作に使える演算子・関数
リストはメソッドだけでなく、演算子や組み込み関数でも操作できます。以下は知っておくと便利なものです。
| 演算子/関数 | 役割(できること) |
|---|---|
+ | 複数のリストを結合する(新しいリストを作成) |
in | 指定した要素がリスト内に含まれているかを判定する |
del | インデックスを指定して要素を削除する(文として使用) |
join() | リスト内の文字列要素を1つの文字列に結合する(str型のメソッド) |
sorted() | リストを並び替えた新しいリストを作成する(元のリストは変更しない) |
メソッドと演算子の違い
-
メソッド
リストに「ドット記法(
.)」でつなげて使う関数で、そのリスト内容を変更することが多いです。例:
my_list.append("A")→ my_listに"A"が追加されます。 -
演算子・関数
リストに対して何かを調べたり、新しい値を返したりする仕組みです。リスト自体は変更しないことが多いです。
例:
"A" in my_list→ "A"が含まれているかどうかを調べるsorted(my_list)→ 新しい並び順のリストを返す(my_list自体はそのまま)
メソッドは「リストに命令して中身を変える」、関数や演算子は「リストの情報を使って別の結果を得る」イメージです。
このセクションで紹介した操作を組み合わせると、リストを自由に扱えるようになります。次のセクションでは、実際に要素を取得・追加・削除する基本操作を解説します。
リストの基本操作:要素の取得・追加・削除・検索
ここでは、リストでよく使う基本的な操作を実際のコードで確認していきます。Pythonのlist型は、要素の取得・追加・削除・検索・並び替えといった操作を簡単に行えるのが特徴です。
要素の取得:インデックス指定
リストのインデックスを指定すると、その位置にある要素を取り出せます。インデックスは0から始まり、-1を使うと末尾を表す点に注意しましょう。
sample_list = ["A", "B", "C", "D", "E"]
# 先頭の要素を取得
print(sample_list[0]) # 出力: A
# 末尾の要素を取得(4 または -1)
print(sample_list[4]) # 出力: E
print(sample_list[-1]) # 出力: E
存在しないインデックスを指定すると IndexError が発生します。
print(sample_list[6])
# 出力: IndexError: list index out of range

要素の取得:スライス(範囲指定)
スライスを使うと、指定した範囲の要素をまとめて取得できます。:(コロン)の前後にインデックスを指定することで、部分的にリストを取り出します。
sample_list = ["A", "B", "C", "D", "E"]
# ① index 0〜4 の1つ前までを取得
print(sample_list[0:4])
# 出力: ['A', 'B', 'C', 'D']
# ② 末尾までを取得
print(sample_list[-1:])
# 出力: ['E']
# ③ index 2〜6 の1つ前までを取得
print(sample_list[2:6])
# 出力: ['C', 'D', 'E']
# ④ index 5〜末尾まで(存在しない範囲)
print(sample_list[5:])
# 出力: []
インデックスの右側(:4 など)は「指定した位置の1つ前まで」を意味します。また、どちらかを省略すると自動的に「先頭から」または「末尾まで」と解釈されます。
# 先頭から index 3 の手前まで
print(sample_list[:3]) # ['A', 'B', 'C']
# index 2 から末尾まで
print(sample_list[2:]) # ['C', 'D', 'E']
存在しないインデックスを指定してもエラーにはなりません。その場合、結果は「空リスト」または「存在する範囲の要素のみ」となります。

補足ポイント
- スライスは部分的なコピーに使用可能(
new_list = sample_list[:]) list[start:end:step]のように ステップ幅を指定可能(例:[::2]で1つおきに取得など)
要素の追加:append() / insert()
リストに新しい要素を追加するには、append() または insert() を使います。
append():末尾に1つ追加insert():位置を指定して追加
sample_list = ["A", "B", "C"]
# 末尾に追加
sample_list.append("D")
# 指定した位置に挿入(インデックス1に追加)
sample_list.insert(1, "X")
print(sample_list) # 出力: ['A', 'X', 'B', 'C', 'D']
要素の削除:remove() / pop() / del
リストから要素を削除する方法はいくつかあります。次のように、削除したい条件によって使い分けられます。
remove():値を指定して削除(最初に一致した1つだけ)pop():インデックスを指定して削除し、その値を返すdel:リストから直接削除(メソッドではなく文として使用)
sample_list = ["A", "B", "C", "D"]
# 値を指定して削除
sample_list.remove("C")
# 位置を指定して削除
sample_list.pop(1)
# del文でも削除可能
del sample_list[0]
print(sample_list) # 出力: ['D']
要素の検索・カウント:in / index() / len()
リストの中から特定の要素を調べたり、要素数を確認したりできます。
in:要素が存在するかを確認(True / False を返す)index():指定した要素の位置を返す(存在しないとエラー)len():要素の数を数える
sample_list = ["A", "B", "C", "D"]
# 要素が含まれているか調べる
print("A" in sample_list) # 出力: True
# 指定した要素の位置を取得
print(sample_list.index("C")) # 出力: 2
# 要素数を数える
print(len(sample_list)) # 出力: 4
リストの応用操作:結合・分割・並び替え
ここでは、リストをより自由に扱うための応用的な操作を紹介します。複数のリストを結合・分割・並び替え・文字列化する方法を学びます。
リストの結合:extend() / +
リストを結合するには、extend() メソッドまたは + 演算子を使います。どちらもリスト同士をまとめる操作ですが、動作には違いがあります。
# extend():元のリストに別のリストを追加(破壊的)
list_a = ["A", "B", "C"]
list_a.extend(["D", "E"])
print(list_a) # 出力: ['A', 'B', 'C', 'D', 'E']
# +:新しいリストを作成(非破壊的)
list_b = ["A", "B", "C"]
list_c = list_b + ["D", "E"]
print(list_c) # 出力: ['A', 'B', 'C', 'D', 'E']
print(list_b) # 出力: ['A', 'B', 'C']
extend():元のリストに直接追加(破壊的操作)+:新しいリストを作る(非破壊的操作)
※破壊的操作・非破壊的操作については後述します。
リストの分割:スライスによる部分取得
スライス構文を使うことで、リストの一部を新しいリストとして取り出せます。応用的な使い方として、複数リストへの分割にも利用できます。
sample_list = ["A", "B", "C", "D", "E"]
# 前半と後半に分割
first_half = sample_list[:3]
second_half = sample_list[3:]
print(first_half) # 出力: ['A', 'B', 'C']
print(second_half) # 出力: ['D', 'E']
スライスを活用すると、部分的なコピーや複製も簡単に行えます。
# リスト全体のコピー
copied_list = sample_list[:]
print(copied_list) # 出力: ['A', 'B', 'C', 'D', 'E']
リストの並び替え:sort() / sorted()
リストを並び替えるには、sort() メソッドまたは sorted() 関数を使います。両者の違いは、「元のリストを変更するかどうか」です。
# sort():元のリストを変更(破壊的)
numbers = [4, 2, 1, 3]
numbers.sort()
print(numbers) # 出力: [1, 2, 3, 4]
# sorted():新しいリストを作成(非破壊的)
nums = [4, 2, 1, 3]
sorted_nums = sorted(nums)
print(sorted_nums) # 出力: [1, 2, 3, 4]
print(nums) # 出力: [4, 2, 1, 3]
sort():元のリストを直接並び替える(破壊的操作)sorted():新しい並び替え済みリストを作る(非破壊的操作)
降順で並び替えたい場合は、reverse=True を指定します。
numbers = [1, 3, 2, 5, 4]
numbers.sort(reverse=True)
print(numbers) # 出力: [5, 4, 3, 2, 1]
文字列結合:join()
リスト内の文字列要素を1つの文字列に結合する場合は、join() メソッドを使います。ただし、要素がすべて文字列である必要があります。
sample_list = ["A", "B", "C", "D"]
sentence = " ".join(sample_list)
print(sentence) # 出力: A B C D
join():リスト内の文字列を結合して1つの文字列を作る- 文字列以外の要素が含まれると
TypeErrorになる点に注意
リスト操作の破壊的・非破壊的とは
Pythonのリスト操作には、データを直接変更するかどうかの違いによって、破壊的操作と非破壊的操作の2種類があります。
| 種類 | 特徴 | 例 |
|---|---|---|
| 破壊的操作 | 元のリストそのものを変更する | extend()・sort() |
| 非破壊的操作 | 元のリストはそのままで、新しいリストを作る | +・sorted() |
破壊的操作はメモリ効率がよく、リストを直接更新できます。一方、非破壊的操作は元のデータを保持したまま処理できるため、安全性が高いのが特徴です。
以下の図は sort()・sorted() の操作の違いを表したものです。破壊的操作ではリストそのものが書き換えられ、非破壊的操作では新しいリストが作られます。

破壊的・非破壊的の違いを理解しておくことで、リスト操作の結果を正確に予測できるようになります。
この記事で学んだこと
この記事では、Pythonのリスト(list)について、基本操作から応用操作までを学びました。リストは、複数のデータをまとめて扱うための基本的なデータ型であり、Pythonプログラミングの基礎を支える重要な要素です。
リストの理解ポイント
[]とlist()の2通りの宣言方法- インデックス・スライスによる要素取得
- append / insert / remove / pop などの基本メソッド
- extend / + / sort / sorted などの応用操作
- 破壊的操作と非破壊的操作の違い
これらを理解することで、リストを自在に扱い、効率的なデータ処理が可能になります。特にデータ分析やWeb開発など、実務でも頻繁に登場する構文なので、早めに慣れておくと後の学習がスムーズになります。
リスト操作の整理
| 分類 | 主な操作 | 例 |
|---|---|---|
| 基本操作 | 要素の取得・追加・削除・検索 | append() / pop() / in / len() |
| 応用操作 | 結合・分割・並び替え・文字列化 | extend() / + / sort() / join() |
| 補足概念 | 破壊的/非破壊的操作 | sort() / sorted() の違い |
次のステップ
リストの仕組みを理解したら、次は辞書(dict)型やタプル(tuple)型にも触れてみましょう。それぞれのデータ型を組み合わせることで、より複雑なデータ構造を扱えるようになり、Pythonの世界がさらに広がります。
▼リストの次に学ぶなら、辞書(dict)型がおすすめです。データを「キーと値」で管理できるPython独自の便利なデータ型で、以下の記事で詳しく解説しています。
-
Pythonの辞書(dict)の入門ガイド|基礎知識と便利メソッド7選を初心者向けに解説!
▼その他のPython関連の記事もあわせてご覧ください。
-
【超初心者向け】もう挫折しない、Python環境構築の基本を徹底解説!
-
【初心者必見】Python開発におすすめのコードエディタ4選!
-
【初心者入門】Python printの使い方について
-
Pythonのクラスとは?使い方とメリットを初心者向けに解説
参考資料
以下のリンクは、この記事で解説した手順や概念に関連する参考資料です。より詳しく学びたい方は、ぜひご覧ください。
-
Python公式ドキュメント - データ構造
-
Python.jp - リスト
-
Python.jp - タプル
【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。
「フリーランスエンジニア」
近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。
「成功する人とそうでない人の違いは何か?」
私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。
比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。
多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、
エンベーダー編集部
エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。

関連記事

2025.09.10
git revertとgit resetの違い|失敗しないコミット取り消し方
Gitのコミット取り消しで迷う方へ。git revertとgit resetの違いを「push済みか」を基準に徹底解説。シーン別の使い方や各コマンドのオプションも紹介し、安全な選択をサポートします。
- プログラミング
- インフラエンジニア
- git

2023.03.30
JavaScriptフレームワーク「Svelte」とは?
Svelteとはウェブアプリケーションの構築を簡単かつ効率的に行うことができるJavaScriptフレームワークです。
- プログラミング

2024.03.25
API開発ツール「Postman」とは? 導入手順や利用料金について解説
PostmanはPostman社が提供を行うAPIプラットフォームです。
- プログラミング

2023.01.31
動的型付け言語の解説、メリットや適したプロジェクトについて
こちらの記事では動的型付け言語についての説明をします。
- プログラミング


