curriculum.liquid
ログアウト中 ログイン

【Free Codecamp】Python学習カリキュラム:第4章



現在の見出し:4.2節:リストの基本

見出し一覧

  • 4.2節:リストの基本
  • - リスト (list) の作成と特徴
  • - 要素へのアクセスとスライス
  • - リストの操作(追加・挿入)
  • - リストの操作(削除)
  • - リストの操作(検索・カウント)
  • - リストの操作(ソート・反転)
  • - リストの長さ
  • - リストの集計(合計、最大、最小など)
  • - ネストしたリスト(入れ子)

【PR】『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に代入

リストの集計(合計、最大、最小など)

数値を含むリストに対して、テストテストはプログラムが意図通りに動作するかを確認する作業です。の合計点を計算するように、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を挿入する
  • 修正したリストを表示する

※以下の実行ツールが動作しなくなった場合、再読み込みをすると改善します。

すべてのカリキュラムを無料登録で学ぶ

プログラミング・マーケティング・AI活用方法を
今すぐ無料登録すると、全てのコンテンツが視聴可能になります。