現在の見出し:4.2節:リストの基本
見出し一覧
- 4.2節:リストの基本
- - リスト (list) の作成と特徴
- - 要素へのアクセスとスライス
- - リストの操作(追加・挿入)
- - リストの操作(削除)
- - リストの操作(検索・カウント)
- - リストの操作(ソート・反転)
- - リストの長さ
- - リストの集計(合計、最大、最小など)
- - ネストしたリスト(入れ子)
【PR】『Python』を学べる企業・個人向けのプログラミングコース
この節で学べること
- Pythonのリスト型の基本概念と特徴
- リストの要素へのアクセス方法とスライス操作
- リストへの要素の追加、挿入、削除方法
- リスト内の要素検索とカウント方法
- リストのソートソートはデータの集合を特定の順序に並び替える操作で、データ処理の基本的かつ重要な機能です。と反転操作
- リストの長さ取得と集計関数関数は一定の処理をまとめたプログラムの塊です。
- ネストしたリスト(多次元配列配列は複数のデータを一つの変数にまとめて格納できるデータ型です。)の操作
リストの基本を学ぶべき理由
- データ構造データ構造はプログラミングでデータを効率的に格納・管理するための仕組みで、適切な選択により操作の高速化が可能です。の基礎としてプログラミングプログラミングはコンピュータに命令を出して特定の目的を達成するための手段です。の根幹を支えます
- 複数のデータをまとめて効率的に管理できます
- データ処理の多くの場面でリスト操作が必要になります
- Pythonのリストは強力で柔軟性の高いデータ構造です
- 配列操作はアルゴリズムアルゴリズムは問題解決のための手順や方法で、具体的な操作手順やルールを一定の形式で表現したものです。やデータ分析の基礎となります
対象者
- プログラミング初心者の方
- Pythonを使い始めた方
- データ構造の基礎を学びたい方
- データ処理や分析を行いたい方
特にデータ分析やアルゴリズムを学びたい方には、リストの操作は最も重要な基礎知識の一つです。効率的なコーディングコーディングはコンピュータが理解できるようにプログラムを書く作業です。のためにも、リストの基本操作をしっかり習得することをお勧めします。
リスト (list) の作成と特徴
Pythonのリストは買い物リストのような複数の値をまとめて管理できるデータ構造です。スーパーで買うものをメモ帳に書き出すように、Pythonでは角括弧 [] の中にカンマで区切って複数の要素を入れることができます。リストは順序を持っていて(最初に書いたものが最初に、次に書いたものが次に並ぶ)、また内容を後から変更できる(ミュータブル)という特徴があります。
リストには数値、文字列文字列は文字の並びを表現するデータ型で、テキストデータを扱うための基本的な構造として広く使用されています。、真偽値真偽値は条件式の評価結果が真(True)か偽(False)かを表すデータ型です。など異なる種類のデータを一緒に入れることができるため、とても柔軟性の高いデータ構造として活用できます。例えば、生徒の情報を「名前、年齢、成績」といった異なる種類のデータをまとめて1つのリストとして扱うことが可能です。このような柔軟性は、データを整理する際に非常に便利な特性です。
fruits = ["apple", "banana", "cherry"]
numbers = [1, 2, 3, 4, 5]
mixed = [1, "hello", 3.14, True]
| 行数 | コード | 解説 |
|---|---|---|
| 1行目 | fruits = ["apple", "banana", "cherry"] | 文字列要素を含むリストを作成し変数変数はデータを一時的に記憶しておく場所です。fruitsに代入代入は変数に値を割り当てる操作です。 |
| 2行目 | numbers = [1, 2, 3, 4, 5] | 数値要素を含むリストを作成し変数numbersに代入 |
| 3行目 | mixed = [1, "hello", 3.14, True] | 異なる型の要素を含むリストを作成し変数mixedに代入 |
- リスト:複数の値をまとめて格納できるデータ構造、買い物リストのように項目を集めたもの
- ミュータブル:変更可能な性質を持つオブジェクトオブジェクトはプログラムの要素の一つで、データとその操作手段を一つにまとめたものです。、消しゴムで消して書き直せるメモのようなもの
- インデックス:リストの要素位置を示す数値、ページ番号のように各要素の位置を識別する
要素へのアクセスとスライス
リストの要素にアクセスするには、本の特定のページを開くように、インデックスという番号を使います。Pythonのインデックスは0から始まるため、最初の要素は [0]、2番目の要素は [1] というように指定します。また、後ろから数えたい場合は負の数を使い、最後の要素は [-1]、後ろから2番目は [-2] というように指定できます。
スライスを使用すると、本の特定の章を取り出すように、リストの一部分を切り取ることができます。スライスは [開始位置:終了位置:ステップ] という形式で指定し、開始位置から終了位置の一つ前までの要素を取得します。ステップは「何個飛ばしで取るか」を指定するもので、省略すると1(すべての要素)になります。これによって、リストの必要な部分だけを柔軟に抽出できます。
numbers = [10, 20, 30, 40, 50]
first = numbers[0] # 10
last = numbers[-1] # 50
subset = numbers[1:4] # [20, 30, 40]
print(first)
print(last)
print(subset)
10
50
[20, 30, 40]
| 行数 | コード | 解説 |
|---|---|---|
| 1行目 | numbers = [10, 20, 30, 40, 50] | 5つの要素を持つリストを作成し変数numbersに代入 |
| 2行目 | first = numbers[0] # 10 | インデックス0(最初の要素)を取得し変数firstに代入 |
| 3行目 | last = numbers[-1] # 50 | インデックス-1(最後の要素)を取得し変数lastに代入 |
| 4行目 | subset = numbers[1:4] # [20, 30, 40] | インデックス1から3までの要素をスライスし変数subsetに代入 |
- インデックスアクセス:角括弧内に数値を指定して特定の要素にアクセスする方法、本の特定のページを開くようなもの
- スライス:角括弧内に開始位置と終了位置を指定してリストの一部を取り出す操作、本の特定の章だけをコピーするようなもの
- 負のインデックス:リストの末尾からカウントしたインデックス指定法、本の最後から数えたページを指定するような方法
リストの操作(追加・挿入)
リストに要素を追加するには、日記の最後に新しい出来事を書き足すように、append()メソッドメソッドは特定の処理をまとめたプログラムの塊です。を使ってリストの末尾に要素を追加します。このメソッドは引数引数はプログラミングで関数やメソッドに渡される値や変数で、関数の動作を柔軟に制御し、コードの再利用性を高めます。に追加したい値を1つだけ指定します。例えば、fruits.append("cherry")のようにすると、fruitsリストの最後に"cherry"という要素が追加されます。
特定の位置に要素を挿入したい場合は、本の特定のページに付箋を挟むように、insert()メソッドを使います。このメソッドは第1引数に挿入位置(インデックス)、第2引数に挿入する値を指定します。また、別のリストの全要素を追加したい場合はextend()メソッドを使用します。これは2つのリストを連結する便利な方法で、例えば夏の果物リストと冬の果物リストを1つの大きな果物リストにまとめるような操作ができます。
fruits = ["apple", "banana"]
fruits.append("cherry") # ["apple", "banana", "cherry"]
fruits.insert(1, "orange") # ["apple", "orange", "banana", "cherry"]
fruits.extend(["grape", "melon"]) # ["apple", "orange", "banana", "cherry", "grape", "melon"]
print(fruits)
['apple', 'orange', 'banana', 'cherry', 'grape', 'melon']
| 行数 | コード | 解説 |
|---|---|---|
| 1行目 | fruits = ["apple", "banana"] | 2つの要素を持つリストを作成し変数fruitsに代入 |
| 2行目 | fruits.append("cherry") | appendメソッドでリストの末尾に"cherry"を追加 |
| 3行目 | fruits.insert(1, "orange") | insertメソッドでインデックス1の位置に"orange"を挿入 |
| 4行目 | fruits.extend(["grape", "melon"]) | extendメソッドで別のリストの全要素を末尾に追加 |
- append():リストの末尾に1つの要素を追加するメソッド、メモの最後に新しい項目を書き足すような操作
- insert():指定した位置に要素を挿入するメソッド、本の間に付箋を挟むような操作
- extend():リストの末尾に別のリストの全要素を追加するメソッド、2つの買い物リストを1つにまとめるような操作
リストの操作(削除)
リストから要素を削除するには、複数の方法があります。買い物リストから購入済みの項目を消すように、remove()メソッドを使うと指定した値を持つ最初の要素を削除できます。例えば、numbers.remove(30)とすると、numbersリストから最初に見つかった値30を持つ要素が削除されます。同じ値が複数ある場合は、最初に見つかった要素だけが削除されます。
また、本の特定のページを切り取るように、pop()メソッドを使うと指定したインデックスの要素を削除して、その削除した値を返します。これは「取り出す」というイメージで、popped = numbers.pop(1)とすると、インデックス1の要素(2番目の要素)を削除すると同時に、その値を変数poppedに代入します。さらに、del文を使うと要素の削除だけを行い、値は返しません。del numbers[0]とすると、リストの最初の要素が削除されます。これらの方法を使い分けることによって、様々な削除操作ができます。
numbers = [10, 20, 30, 40, 50]
numbers.remove(30) # [10, 20, 40, 50]
popped = numbers.pop(1) # popped = 20, numbers = [10, 40, 50]
del numbers[0] # numbers = [40, 50]
print(popped)
print(numbers)
20
[40, 50]
| 行数 | コード | 解説 |
|---|---|---|
| 1行目 | numbers = [10, 20, 30, 40, 50] | 5つの要素を持つリストを作成し変数numbersに代入 |
| 2行目 | numbers.remove(30) | removeメソッドで値30を持つ最初の要素を削除 |
| 3行目 | popped = numbers.pop(1) | popメソッドでインデックス1の要素を削除し変数poppedに代入 |
| 4行目 | del numbers[0] | del文でインデックス0の要素を削除 |
- remove():指定した値を持つ最初の要素を削除するメソッド、買い物リストから特定の項目を消すような操作
- pop():指定したインデックスの要素を削除して返すメソッド、箱から特定の物を取り出すような操作
- del文:特定のインデックスやスライスの要素を削除する文、不要なページを切り取るような操作
リストの操作(検索・カウント)
リスト内の特定の要素を検索するには、本の索引で特定の単語を探すように、index()メソッドを使います。このメソッドは指定した値を持つ最初の要素のインデックス(位置)を返します。例えば、fruits.index("cherry")とすると、fruitsリスト内で最初に"cherry"が見つかる位置のインデックスが返されます。もし指定した値がリスト内に存在しない場合は、ValueErrorというエラーが発生します。
また、クラスの出席簿で特定の名前が何回出てくるかを数えるように、count()メソッドを使うとリスト内に特定の値が何回出現するかを調べることができます。例えば、fruits.count("apple")とすると、fruitsリスト内に"apple"という値が何個あるかを数えて返します。さらに、in演算子演算子は数値や文字列などのデータを扱う際に使用される記号や記述方法です。を使うと、リスト内に特定の値が存在するかどうかをTrue(存在する)またはFalse(存在しない)で確認できます。これは「この買い物リストにミルクは含まれている?」と確認するような操作です。
fruits = ["apple", "banana", "cherry", "apple"]
index = fruits.index("cherry") # 2
count = fruits.count("apple") # 2
exists = "banana" in fruits # True
print(index)
print(count)
print(exists)
2
2
True
| 行数 | コード | 解説 |
|---|---|---|
| 1行目 | fruits = ["apple", "banana", "cherry", "apple"] | 4つの要素(重複あり)を持つリストを作成し変数fruitsに代入 |
| 2行目 | index = fruits.index("cherry") | indexメソッドで"cherry"の最初の出現位置のインデックスを取得 |
| 3行目 | count = fruits.count("apple") | countメソッドで"apple"がリスト内に出現する回数を取得 |
| 4行目 | exists = "banana" in fruits | in演算子で"banana"がリスト内に存在するかどうかを確認 |
- index():指定した値を持つ最初の要素のインデックスを返すメソッド、本の中で特定の単語が最初に出てくるページを調べるような操作
- count():指定した値がリスト内に出現する回数を返すメソッド、テキスト内で特定の単語が何回使われているかを数えるような操作
- in演算子:リスト内に特定の値が存在するかを確認する演算子、買い物リストに特定の項目が含まれているか確認するような操作
リストの操作(ソート・反転)
リストを並べ替えるには、図書館の本を著者名順に整理するように、sort()メソッドを使います。このメソッドはリスト自体を直接変更するインプレース操作で、デフォルトでは小さい順(昇順)にソートします。例えば、数値なら1, 2, 3...と、文字列ならアルファベット順や五十音順になります。大きい順(降順)にソートしたい場合はreverse=Trueという引数を指定します。
元のリストはそのままにして、ソートされた新しいリストを別に作りたい場合は、本の内容を変えずにコピーして並べ替えるように、sorted()関数を使います。また、リストの要素の順序を前後逆にするには、reverse()メソッドを使います。これは本のページを最後から最初へと逆順に並べ替えるような操作です。例えば、[1, 2, 3]というリストに対してreverse()を使うと[3, 2, 1]になります。このメソッドはソートではなく、単に順序を逆にするだけなので、元の順序が保持されます。
numbers = [3, 1, 4, 2]
numbers.sort() # [1, 2, 3, 4]
numbers.reverse() # [4, 3, 2, 1]
sorted_list = sorted([5, 2, 8, 1]) # [1, 2, 5, 8]
print(numbers)
print(sorted_list)
[4, 3, 2, 1]
[1, 2, 5, 8]
| 行数 | コード | 解説 |
|---|---|---|
| 1行目 | numbers = [3, 1, 4, 2] | 4つの要素を持つリストを作成し変数numbersに代入 |
| 2行目 | numbers.sort() | sortメソッドでリストを昇順にソート(インプレース操作) |
| 3行目 | numbers.reverse() | reverseメソッドでリストの要素の順序を反転(インプレース操作) |
| 4行目 | sorted_list = sorted([5, 2, 8, 1]) | sorted関数で新しいリストを昇順にソートして返し変数sorted_listに代入 |
- sort():リスト自体を昇順または降順にソートするメソッド、本棚の本を著者名順に並べ替えるような操作
- sorted():リストをソートした新しいリストを返す関数、元の本棚はそのままで、別の棚に本を並べ替えて置くような操作
- reverse():リストの要素の順序を反転するメソッド、本を最後のページから最初のページへと逆順に並べ替えるような操作
リストの長さ
リストの長さ(要素数)を取得するには、本のページ数を数えるように、len()関数を使います。この関数はリスト内に含まれる要素の数を整数値として返します。例えば、len([1, 2, 3])は3を返します。この機能は、リストが空かどうかの確認や、リストの最後の要素にアクセスするときなど、様々な場面で役立ちます。
リストの長さは特にループループは一連の命令を繰り返し実行する構造です。処理やインデックス操作で重要です。例えば、リストの全要素を順番に処理するforfor文はプログラミングの繰り返し制御構文で、指定回数や条件に基づき特定コードを反復実行でき、コードの簡潔さと可読性を向上させます。ループの回数を決めたり、最後の要素のインデックスをlen(リスト名) - 1で計算したりする場面で使用します。また、空のリスト(要素が1つもない状態)かどうかを確認するには、len(リスト名) == 0という条件式を使います。これはプログラムプログラムはコンピュータに対して何をすべきかを指示する一連の命令です。の流れを制御する条件分岐条件分岐はプログラム内で指定した条件によって処理の分岐を行う制御構造です。などでよく使われる重要な操作です。
fruits = ["apple", "banana", "cherry", "date"]
length = len(fruits) # 4
is_empty = len([]) == 0 # True
print(length)
print(is_empty)
4
True
| 行数 | コード | 解説 |
|---|---|---|
| 1行目 | fruits = ["apple", "banana", "cherry", "date"] | 4つの要素を持つリストを作成し変数fruitsに代入 |
| 2行目 | length = len(fruits) | len関数でリストの要素数を取得し変数lengthに代入 |
| 3行目 | is_empty = len([]) == 0 | 空リストの長さが0かどうかを確認し結果を変数is_emptyに代入 |
- len():リストや他のシーケンスシーケンスはプログラミングにおける要素の順序付きコレクションで、データの効率的管理と処理を可能にします。の要素数を返す関数、本のページ数を数えるような操作
- 空リスト:要素を持たないリスト([])、何も書かれていない空の買い物リストのようなもの
リストの集計(合計、最大、最小など)
数値を含むリストに対して、テストテストはプログラムが意図通りに動作するかを確認する作業です。の合計点を計算するように、sum()関数を使うことでリスト内の全要素の合計値を求めることができます。例えば、sum([10, 20, 30])は60を返します。この関数はリスト内の要素がすべて数値である必要があり、文字列や他の型が混じっているとエラーになります。合計値を求める操作は、例えば売上データの集計や平均値の計算など、様々なデータ分析の基礎となる重要な機能です。
同様に、クラスで一番高い点数や一番低い点数を見つけるように、min()関数とmax()関数を使うことでリスト内の最小値と最大値をそれぞれ取得できます。これらの関数は、数値だけではなく文字列にも使うことができ、文字列の場合はアルファベット順や辞書順で比較されます。例えば、min(["apple", "banana", "cherry"])は"apple"を返し、max([5, 2, 8])は8を返します。これらの集計関数を使うことによって、データの傾向や特性をすばやく把握することができます。
numbers = [10, 5, 30, 15, 20]
total = sum(numbers) # 80
minimum = min(numbers) # 5
maximum = max(numbers) # 30
print(total)
print(minimum)
print(maximum)
80
5
30
| 行数 | コード | 解説 |
|---|---|---|
| 1行目 | numbers = [10, 5, 30, 15, 20] | 5つの数値要素を持つリストを作成し変数numbersに代入 |
| 2行目 | total = sum(numbers) | sum関数でリストの要素の合計値を計算し変数totalに代入 |
| 3行目 | minimum = min(numbers) | min関数でリストの最小値を取得し変数minimumに代入 |
| 4行目 | maximum = max(numbers) | max関数でリストの最大値を取得し変数maximumに代入 |
- sum():リストの要素の合計値を返す関数、買い物の合計金額を計算するような操作
- min():リストの最小値を返す関数、一連の温度記録から最低気温を見つけるような操作
- max():リストの最大値を返す関数、テストの最高得点を見つけるような操作
ネストしたリスト(入れ子)
リストの要素として別のリストを含めることで、引き出しの中に仕切りがあってさらに小分けされているように、ネストしたリスト(多次元配列)を作成できます。このような構造は、エクセルのような表データや、チェス盤のような格子状のデータ、3D空間の座標など、複数の次元を持つデータを表現するときに非常に便利です。ネストしたリストの要素にアクセスするには、複数のインデックスを連続して指定します。
例えば、2次元リスト(リストのリスト)の場合、最初のインデックスで行(横の列)を、2番目のインデックスで列(縦の列)を指定します。これは座標のように考えることができ、matrix[1][2]は2行目の3列目の要素を意味します。さらに次元が増えると、ビルの階数、部屋番号、引き出し番号のようにインデックスを追加していきます。このように、ネストしたリストを使うことによって、複雑な階層構造を持つデータを直感的に表現し操作することができます。学校のクラス分けや座席表、ゲームの盤面状態など、現実世界の多くの情報を効率的に管理できます。
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
element = matrix[1][2] # 6 (2行目、3列目)
row = matrix[0] # [1, 2, 3] (1行目全体)
print(element)
print(row)
6
[1, 2, 3]
| 行数 | コード | 解説 |
|---|---|---|
| 1行目 | matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] | 3x3の2次元リスト(行列)を作成し変数matrixに代入 |
| 2行目 | element = matrix[1][2] | 2次元インデックスアクセスで行列の特定要素を取得 |
| 3行目 | row = matrix[0] | 1次元目のインデックスだけを指定し行全体を取得 |
- ネストしたリスト:リストを要素として含む別のリスト、箱の中に小さな箱が入っているような構造
- 多次元配列:複数の次元を持つデータ構造、表やマス目、立体的な格子のようなもの
- 行列:2次元の数値データ構造、表計算ソフトのスプレッドシートのようなもの
4.2節の演習問題
以下の問題を通じて、リスト操作の理解を深めてみましょう。以下問題の回答をPythonコードで書き、「正誤判定」ボタンをクリックして回答を確認してください。
- numbers という名前のリストを作成し、1から5までの整数を格納する
- リストの最後に数値6を追加する
- リストの2番目の位置(インデックス1)に数値0を挿入する
- 修正したリストを表示する
※以下の実行ツールが動作しなくなった場合、再読み込みをすると改善します。

















