【Python基本文法】リストの使い方

文法

概要

リストを使うことで、複数のデータをひとまとまりに扱うことができます。

# リストの定義
list1 = [1, 2, 3, 4, 5]
list2 = ["ab", "cd", "ef", "gh", "ij"]

# 要素の参照
x1 = list1[1]

# 要素の追加
list2.append("kl")

# 要素の削除
del list1[0]
list1.clear()

リストとは?リストを使うメリットは?

リストとは何か

リストはデータ構造の一種です。複数のデータをひとまとまりに扱うために使用されます。

リストの中の、一つ一つのデータを「要素」と呼びます。

リストは次のような形式で書きます。0個以上の要素を[]の中にコンマ(,)区切りで書くことで、リストとして扱われます。

[要素, 要素, ...]

要素には順番があります。一番左の要素が最初、一番右の要素が最後です。

例えば、1から10までの整数を格納したリストは、次のように書きます。

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

リストを使うメリット

リストを使うことで、プログラムをスッキリ書くことができ(可読性の向上)、仕様変更に強くなります(保守性の向上)。

まずは例を見てみましょう。リストを使わずに複数のデータを扱おうとして、次のようにプログラムを作ったとします。

# 5人の身長の平均を求める
h1 = 160.1
h2 = 156.3
h3 = 155.3
h4 = 171.2
h5 = 163.0

ave = (h1 + h2 + h3 + h4 + h5) / 5  # 161.18

変数を5つ定義すれば良いですね。変数って何?という方は、以下の記事をご覧ください。

しかし、リストを使わず、変数を用いた方法だと、以下のような問題があります。

  • 大量のデータを扱うのに向いていません。例えば、500人分の身長データを扱う場合は、変数を500個定義する必要があり、コードを書くのも読むのも大変です。
  • 要素数の変更で修正する箇所が多くなります。例えば、人数が5人から6人に増えた場合、次のような修正が必要です。処理が複雑になればなるほど、修正箇所を特定するのは困難になります。
    • 変数h6の追加
    • aveの計算式にh6を追加
    • aveの分母を5から6に変更

そこで、上記のプログラムを、リストを使って書き換えてみます。

# 5人の身長の平均を求める
h_list = [160.1, 156.3, 155.3, 171.2, 163.0]

ave = sum(h_list) / len(h_list)  # 161.18

sum(h_list)は身長の合計、len(h_list)はh_listの要素数です。

2つのプログラムを見比べてみると、リストを使った方が、次の利点があることがわかります。

  • データを格納する変数は1つで良くなります。
    (ちなみに「変数は一つだが、もし500人分の身長を扱うなら、その分コードも多くなるじゃないか」と言われれば、確かにそうです。しかし、実際にはデータをコードに直接書くことはあまりなく、外部ファイルやデータベースからリストとして値を取り出すことが多いので、問題にはなりません。)
  • 人数が5人から変更になっても、h_listに要素を追加するだけで修正が完了します。

今挙げたメリットはほんの一例で、リストを用いると他にも様々な恩恵が得られます。

使用方法

リストの使い方を見ていきましょう。

初期化

既に述べたように、[]で囲んでリストを初期化することが出来ます。

list1 = [1, 2, 3, 4, 5]

連続データを作る場合は、range関数を使って定義することもできます。range関数の返り値はrangeオブジェクトなので、list関数でlistに変換します。

list2 = list(range(1, 6))  # [1, 2, 3, 4, 5]

同じ値で初期化する場合は、アスタリスク(*)を用います。

list3 = [0] * 10  # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

参照

1つの要素を参照

リストの要素を参照するときは、次の形式を用います。

リスト変数[添え字]

リストの各要素の番号を添え字と言います。最初の要素の添え字は「0」です。

例えば、リスト[10, 20, 30, 40, 50]で、要素「10」の添え字は「0」、要素「50」の添え字は「4」です。

具体例を見てみましょう。

list1 = [10, 20, 30, 40, 50]
x = list1[0]  # xに10が代入される
y = list1[2]  # yに30が代入される
z = list1[4]  # zに50が代入される

添え字を使って、リストの特定の要素を変更することができます。

list1 = [10, 20, 30, 40, 50]
list1[1] = 60  # 20を60に変更
print(list1)  # [10, 60, 30, 40, 50]

添字を-nとすることで、右からn番目の要素を参照することができます。このとき、最後の要素の添え字は-1です。(これがとても便利です!)

例えば、先ほどと同様のリスト[10, 20, 30, 40, 50]で、右から3番目の要素「30」の添え字は-3です。

list1 = [10, 20, 30, 40, 50]
x = list1[-3]  # xに30が代入される

要素と添え字の対応を表にまとめると、以下のようになります。

要素1020304050
添え字(正)01234
添え字(負)-5-4-3-2-1
リストの添え字

範囲を指定して参照(スライス)

また、以下の形式で、リストの範囲を指定することも出来ます。この操作をスライスと呼びます。

リスト変数[開始位置の添え字:終了位置の添え字]

ここで、終了位置の添え字の要素は含まれないことに注意してください。以下に使用例を示します。

list1 = [1, 2, 3, 4, 5]
sub_list = list1[1:4]
print(sub_list)  # [2, 3, 4]

for文を用いた要素の取り出し

リストをfor文で使用すると、要素を一つずつ取り出すことができます。

以下の例ではfor文とif文を使用していますが、分からない方は以下を参照してください。

list1 = [1, 2, 3, 4, 5]
for i in list1:
    if i % 2 == 0:
        print(str(i) + "は偶数です")
    else:
        print(str(i) + "は奇数です")

実行すると、以下のような出力になります。

1は奇数です
2は偶数です
3は奇数です
4は偶数です
5は奇数です

要素の追加

append関数を用いて、リストの最後に要素を追加することができます。

list1 = [1, 2, 3, 4, 5]
list1.append(6)
print(list1)  # [1, 2, 3, 4, 5, 6]

insert関数を用いると、リストの任意の位置に要素を追加することが出来ます。第一引数に追加する位置、第二引数に追加する値を指定します。

list1 = [1, 2, 3, 4, 5]
list1.insert(2, 10)
print(list1)  # [1, 2, 10, 3, 4, 5]

要素の削除

del文を用いて、リストの要素を削除することが出来ます。スライスで指定した範囲を削除することもできます。

# 添え字2を削除
list1 = [1, 2, 3, 4, 5]
del list1[2]
print(list1)  # [1, 2, 4, 5]

# 添え字1〜3を削除
list2 = [1, 2, 3, 4, 5]
del list2[1:4]
print(list2)  # [1, 5]

練習問題

問題を解いて知識を定着させましょう。

リストの定義

1から20までの連続した整数20個を格納したリスト([1, 2, …, 19, 20])を、変数list1として定義してください。

list1 = list(range(1, 21))

スライス

先程定義したlist1から、前半10個と後半10個の要素を切り出し、それぞれ変数first_half、latter_halfに代入してください。

first_half = list1[0:10]
latter_half = list1[10:20]

リストとfor文

for文を用いて、先程定義したlatter_halfのうち3の倍数の数の合計を計算して、表示してください。ちなみに答えは45(= 12 + 15 + 18)です。

ans = 0
for i in latter_half:
    if i % 3 == 0:
        ans += i
print(ans)
タイトルとURLをコピーしました