はじめに
※なお、MQL5のデータ型については以下の記事をご参照ください。
第6回目の今回は「リスト」について解説していきたいと思います。
Pythonにおけるリストは、複数のデータをまとめて扱うためのデータ型です。リストを理解し活用することで、プログラムの効率や柔軟性が大幅に向上します。本記事では、リストの基本的な構造、作成方法、操作方法について段階的に学び、さらに実践的な活用方法にも触れていきます。
リストとは
リストは、Pythonの基本的なデータ型の一つで、複数の値を一つのまとまりとして格納することができます。この特徴により、異なる種類のデータを組み合わせて管理したり、複数のデータを効率よく処理したりすることが可能です。
要素とは?
リスト内に格納される個々の値を「要素」と呼びます。要素はリスト内でそれぞれ独立しており、文字列、数値、ブール値、さらには他のリストなど、さまざまなデータ型を格納することができます。一つのリストに異なるデータ型の要素を混在させることも可能です。
リストは変数と似ていますが、変数が1つの値しか格納できないのに対し、リストは複数の値を格納できる「ロッカー」のようなものだと考えると分かりやすいでしょう。
リストの作り方
リストを作成するには、角括弧([]
)を使用し、中に要素をカンマで区切って記述します。以下に簡単な例を示します。
# リストの作成
名前リスト = ["佐藤", "鈴木", "高橋"]
# リストを表示
print(名前リスト)
上記のコードでは、「佐藤」「鈴木」「高橋」という3つの要素を含むリストを作成しています。このリストは名前リスト
という変数に格納され、print
文で中身を確認できます。
空のリストの作成
リストは、要素が空の状態で作成することもできます。空のリストを作成する方法は以下の通りです。
# 空のリストの作成
空リスト = []
# 空リストを表示
print(空リスト)
この方法は、後から要素を追加したい場合などに役立ちます。
インデックスとは?
リストの要素には「インデックス」と呼ばれる番号が自動的に割り振られます。インデックスは0から始まり、左から順に増加します。例えば、以下のリストにおいて:
名前リスト = ["佐藤", "鈴木", "高橋"]
というように割り振られます。インデックスを指定することで、リスト内の特定の要素にアクセスできます。この基本概念はリスト操作の基盤となります。
リストの操作
要素へのアクセス
リストに格納されたデータを取り出す方法の基本は、「インデックス」を使うことです。インデックスは0から始まり、リスト内の各要素に番号が割り振られています。
たとえば、以下のリストを見てみましょう:
numbers = [10, 20, 30, 40, 50]
リストの最初の要素を取り出すには、インデックス0を使います。
print(numbers[0]) # 出力: 10
2番目の要素はインデックス1、3番目はインデックス2と続きます。
負のインデックス
リストでは負のインデックスも使用できます。負のインデックスは末尾から数える番号で、-1が最後の要素、-2が最後から2番目の要素を指します。
print(numbers[-1]) # 出力: 50 (最後の要素)
print(numbers[-3]) # 出力: 30 (最後から3番目の要素)
開始位置や終了位置を指定する
リストの一部を取り出したい場合、インデックスを範囲で指定できます。この操作を「スライス」と呼びます。
たとえば、リストの2番目から4番目までの要素を取り出したい場合:
print(numbers[1:4]) # 出力: [20, 30, 40]
ここで注意したいのは、終了位置のインデックスは含まれないことです。この例では1
(2番目)から4
(5番目の手前)までが対象になります。
開始位置や終了位置を省略する
スライスでは、開始位置や終了位置を省略することもできます。
- 開始位置を省略
リストの最初から指定した終了位置までを取り出します。
print(numbers[:3]) # 出力: [10, 20, 30]
- 終了位置を省略
指定した開始位置から最後までを取り出します。
print(numbers[2:]) # 出力: [30, 40, 50]
- 両方省略
開始位置と終了位置を両方省略すると、リスト全体がそのまま返されます。
print(numbers[:]) # 出力: [10, 20, 30, 40, 50]
ステップ幅を設ける
スライスにステップ幅を指定すると、一定の間隔で要素を取得できます。ステップ幅はスライスの最後にコロンをつけて指定します。
たとえば、2つおきに要素を取り出す場合:
print(numbers[::2]) # 出力: [10, 30, 50]
逆順に取り出す場合は、ステップ幅を負の値にします。
print(numbers[::-1]) # 出力: [50, 40, 30, 20, 10]
ネストについて
リストの中にさらにリストを含めることができます。これを「リストのネスト」と言います。簡単に言うと、リストの中に小さなリストを入れて、階層的なデータを表現する方法です。まずは、以下のようなネストされたリストを作成してみましょう:
nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
このリストは3つの小さなリストを含んでいます。小さなリストごとにインデックスが割り振られています:
ネストされたリストの特定の要素を取り出すには、外側のリストと内側のリスト、それぞれにインデックスを指定します。
例1:最初のリストの2番目の要素を取り出す
最初のリスト[1, 2, 3]
はインデックス0
でアクセスできます。その中の2番目の要素2
を取り出すには次のように書きます:
print(nested_list[0][1]) # 出力: 2
説明:
例2:3番目のリストの最初の要素を取り出す
3番目のリスト[7, 8, 9]
はインデックス2
でアクセスできます。その中の最初の要素7
を取り出すには次のように書きます:
print(nested_list[2][0]) # 出力: 7
説明:
スライスを使った一部の要素の取得
スライスはネストされたリストにも使用できます。たとえば、最初のリスト[1, 2, 3]
の中から、最初の2つの要素[1, 2]
を取り出す場合は次のように書きます:
print(nested_list[0][:2]) # 出力: [1, 2]
説明:
4リストの足し算・掛け算
リストでは、要素の追加や繰り返しを簡単に行うための「足し算」と「掛け算」が使えます。これらはリスト全体を操作するシンプルな方法として活用できます。
足し算:リストを結合する
リストの足し算は、2つのリストを結合して1つのリストを作る操作です。以下の例を見てみましょう:
list1 = [1, 2, 3]
list2 = [4, 5, 6]
combined = list1 + list2
print(combined) # 出力: [1, 2, 3, 4, 5, 6]
解説:
足し算での注意点
リストに直接数値や文字列を足すことはできません。例えば以下のコードはエラーになります:
list1 = [1, 2, 3]
list1 + 4 # エラー: TypeError
正しい方法: 数値や文字列を追加するには、一度それをリストに変換して足す必要があります。
list1 = [1, 2, 3]
new_list = list1 + [4]
print(new_list) # 出力: [1, 2, 3, 4]
掛け算:要素を繰り返す
リストの掛け算は、要素を繰り返す操作です。以下の例を見てください:
list1 = [1, 2, 3]
repeated = list1 * 3
print(repeated) # 出力: [1, 2, 3, 1, 2, 3, 1, 2, 3]
解説:
掛け算での注意点
リストの掛け算では、繰り返したい回数を整数で指定します。小数や文字列を指定するとエラーになります:
list1 = [1, 2, 3]
list1 * 1.5 # エラー: TypeError
5. リストの追加と削除
Pythonのリストでは、さまざまな方法で要素を追加したり削除したりすることができます。それぞれの方法を一つずつ丁寧に解説していきます。
要素の追加方法
リストに新しい要素を加えるには、以下の3つの方法があります。
append() メソッド:末尾に追加
append() メソッドは、リストの一番最後に新しい要素を追加します。簡単な例を見てみましょう:
fruits = ["りんご", "バナナ"]
fruits.append("みかん")
print(fruits) # 出力: ["りんご", "バナナ", "みかん"]
解説:
リストを追加する場合の動作: append() にリストを渡すと、そのリスト全体が1つの「要素」として追加されます。
fruits = ["りんご", "バナナ"]
fruits.append(["みかん", "ぶどう"])
print(fruits) # 出力: ["りんご", "バナナ", ["みかん", "ぶどう"]]
メソッドとは
メソッドとは、リストなど特定の「データ型」にあらかじめ用意されている「命令」や「操作」のことです。簡単に言えば、「リストに対して何かをするための道具」です。
たとえば、「リストに新しいデータを追加したい」ときには、Pythonでは append() というメソッドを使います。このメソッドを使えば、リストの末尾に簡単にデータを追加することができます。
メソッドを使うには、操作をしたい「リストの名前」の後に ピリオド(.
) をつけて、使いたいメソッドの名前を書きます。その後に カッコ ()
をつけて実行します。
extend() メソッド:複数の要素を追加
extend() メソッドは、リストに複数の要素を一度に追加したいときに使います。
fruits = ["りんご", "バナナ"]
fruits.extend(["みかん", "ぶどう"])
print(fruits) # 出力: ["りんご", "バナナ", "みかん", "ぶどう"]
解説:
注意点: append() と違い、リストではなく文字列を渡すと文字が1文字ずつ追加されます。
fruits.extend("もも")
print(fruits) # 出力: ["りんご", "バナナ", "も", "も"]
insert() メソッド:特定の位置に追加
insert() メソッドは、リストの指定した位置に要素を挿入します。位置を指定するために、インデックス番号を最初に書きます。
fruits = ["りんご", "バナナ"]
fruits.insert(1, "みかん")
print(fruits) # 出力: ["りんご", "みかん", "バナナ"]
解説:
注意点: インデックスが範囲外でもエラーにはなりません。例えば、insert(10, “ぶどう”) を使うと末尾に追加されます。
リスト内の要素を削除する方法
del 文:特定の位置の要素を削除
fruits = ["りんご", "バナナ", "みかん"]
del fruits[1]
print(fruits) # 出力: ["りんご", "みかん"]
解説:del文は、
という記述で使えます。
pop() メソッド:削除した要素を取得
pop() メソッドは、要素を削除すると同時に、その削除された要素を返します。
fruits = ["りんご", "バナナ", "みかん"]
removed_item = fruits.pop(1)
print(removed_item) # 出力: バナナ
print(fruits) # 出力: ["りんご", "みかん"]
解説:pop() メソッドは、
という記述で使えます。
last_item = fruits.pop()
print(last_item) # 出力: みかん
remove() メソッド:指定した値を削除
remove() メソッドは、リスト内の指定した値を検索し、その最初の1つを削除します。
fruits = ["りんご", "バナナ", "みかん", "バナナ"]
fruits.remove("バナナ")
print(fruits) # 出力: ["りんご", "みかん", "バナナ"]
解説:remove() メソッドは、
という記述で使えます。インデックスではなく、直接「値」を指定するのがポイントです。
clear() メソッド:すべての要素を削除
clear() メソッドを使うと、リスト内のすべての要素を一度に削除して空にすることができます。
fruits = ["りんご", "バナナ", "みかん"]
fruits.clear()
print(fruits) # 出力: []
という記述で使えます
リストの情報取得方法
リストには、内部の情報を簡単に調べるための方法がいくつか用意されています。それぞれの操作方法と動きを説明します。
in 演算子:要素が含まれているか確認する
in演算子を使うと、リストに特定の要素が含まれているかどうかを調べることができます。in演算子は、指定した要素がリスト内にあれば True、なければ False を返します。
fruits = ["りんご", "バナナ", "みかん"]
print("りんご" in fruits) # 出力: True
print("ぶどう" in fruits) # 出力: False
このコードでは、「りんご」がリスト内に含まれているので True が返され、「ぶどう」は含まれていないので False になります。
count() メソッド:指定した要素の出現回数を取得する
count() メソッドは、リスト内で特定の値がいくつあるかを数えます。値が全く存在しない場合は 0 を返します。
fruits = ["りんご", "バナナ", "りんご", "みかん"]
print(fruits.count("りんご")) # 出力: 2
print(fruits.count("ぶどう")) # 出力: 0
ここでは「りんご」が2回出現しているため、2 と表示されます。「ぶどう」は存在しないので 0 になります。
index() メソッド:指定した要素の位置を取得する
index() メソッドは、リスト内で特定の値が最初に出現する位置(インデックス番号)を返します。ただし、指定した値がリスト内に存在しない場合はエラーになります。
fruits = ["りんご", "バナナ", "みかん"]
print(fruits.index("バナナ")) # 出力: 1
この例では、「バナナ」がリストのインデックス1にあるため、1 が返されます。一方、リストに存在しない要素を指定するとエラーになります。
print(fruits.index("ぶどう")) # ValueError: 'ぶどう' is not in list
sort() メソッド:リストを並べ替える
sort() メソッドを使うと、リストの要素を昇順または降順に並べ替えることができます。リスト内のデータ型によっては並べ替えができない場合もあるため、すべての要素が比較可能である必要があります。
numbers = [5, 2, 9, 1]
numbers.sort()
print(numbers) # 出力: [1, 2, 5, 9]
昇順に並べ替えられたリストが表示されます。降順に並べ替える場合は、引数reverse=True を渡します。
※引数というのは、詳細なパラメーターを指定する役割をもつものです。関数について、解説する際に合わせて解説しますので、今は「そういうものがあるんだ」ぐらいに思って頂ければ大丈夫です。
numbers.sort(reverse=True)
print(numbers) # 出力: [9, 5, 2, 1]
reverse() メソッド:リストを逆順にする
reverse() メソッドは、リスト内の要素の順序をその場で逆転させます。sort() とは異なり、並べ替えではなく、現在の順番を単純に逆にするだけです。
numbers = [5, 2, 9, 1]
numbers.reverse()
print(numbers) # 出力: [1, 9, 2, 5]
この操作では、リストの順序が完全に逆になります。
len() 関数:リストの要素数を取得する
len() 関数を使うと、リストに含まれる要素の数を取得できます。この関数は Pythonの組み込み関数で、リストだけでなく他のデータ型にも使用できます。
fruits = ["りんご", "バナナ", "みかん"]
print(len(fruits)) # 出力: 3
リストに3つの要素が含まれているため、結果として 3 が返されます。
min() 関数:リストの最小値を取得する
min() 関数は、リスト内の要素の中で最小の値を返します。この関数は数値や文字列のリストに使用することができ、全ての要素が比較可能である必要があります。
numbers = [5, 2, 9, 1]
print(min(numbers)) # 出力: 1
この例では、numbers
リストの中で一番小さい値「1」が返されます。
文字列の場合は、アルファベット順(辞書順)で最小値を判断します。
letters = ["b", "a", "d"]
print(min(letters)) # 出力: a
リストが空の場合、min() を使用するとエラーになります。
empty_list = []
# print(min(empty_list)) # ValueError: min() arg is an empty sequence
max() 関数:リストの最大値を取得する
max() 関数は、リスト内の要素の中で最大の値を返します。この関数も数値や文字列のリストに使用可能で、全ての要素が比較可能である必要があります。
numbers = [5, 2, 9, 1]
print(max(numbers)) # 出力: 9
この例では、numbers リストの中で一番大きい値「9」が返されます。
文字列の場合は、アルファベット順(辞書順)で最大値を判断します。
letters = ["b", "a", "d"]
print(max(letters)) # 出力: d
空のリストに対して使用すると、max() もエラーになります。
empty_list = []
# print(max(empty_list)) # ValueError: max() arg is an empty sequence
応用:min() と max() の値の位置を取得する
min() や max() で得られた値のインデックス(位置)を取得するには、index() メソッドを組み合わせます。
numbers = [5, 2, 9, 1]
min_value_index = numbers.index(min(numbers))
max_value_index = numbers.index(max(numbers))
print(min_value_index) # 出力: 3
print(max_value_index) # 出力: 2
この例では、最小値「1」はインデックス3、最大値「9」はインデックス2にあります。このようにすれば、値だけでなくその位置も特定することができます。
まとめ
この記事では、Pythonのリスト操作について詳しく解説しました。リストは複数のデータを扱う上で非常に便利なデータ型であり、追加、削除、情報取得など多彩な操作が可能です。
今回の記事では
・リスト操作の基礎(要素のアクセス、スライスなど)
・要素やリストの追加方法(append, extend, insert)
・削除方法(del, pop, remove, clear)リストから情報を取得するためのメソッドや関数(in演算子、count, index, sort, reverse, len, min, max)について、実践的なコード例を交えながら説明しました。
Pythonでリストを自在に操作できるようになると、データ処理やプログラムの効率が格段に上がります。リストはプログラミング初心者にとって最初の壁になりやすい部分ですが、この記事の内容を参考に、基本的な操作を繰り返し練習し、次のステップに進んでください。