親子IoTワークショップ

マイコンとクラウドを使ってIoTとプログラミングを学ぼう

[ トップ | 開催予定・概要 | 2024-12開催 | お知らせ | Facebook ]

リストとは

リスト(list)は、Pythonで使える特別なデータの種類(データ型)のひとつです。複数のデータを順番に並べて、その並びを処理する(読む、書く、編集する)のに使います。例えば、以下のようなデータの並びを使いたいとしましょう。曜日の名前の並びです。

Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday

これと同じ構造のデータをPythonで表現するには以下のようにします。

daysOfWeek = [ "Monday", "Tuesday", "Wednesday",
               "Thursday", "Friday", "Saturday", "Sunday" ]

このように、データをカンマ(,)で区切って並べ、データの並びをカギかっこ([])で囲みます。ここでは7個の文字データが並ぶリストを作り、そのリストを「daysOfWeek」という名前の変数(variable)に入れています。また上の例のように、複数の行を使ってリストに入れるデータを並べることができます。もちろん1行でリストを作っても問題ありません。

リスト内のデータをひとつづつ読む

最も典型的な(よくある)リストの使い方は、リストの中のデータをひとつづつ順番に読んで、その個々のデータを使って何かをすることです。例えば、上記のリストの中のデータ(曜日の名前)をひとつづつ順番に読んで、それをShellにプリントするとします。これをやるプログラムは次のようになります。

for day in daysOfWeek:
    print(day)

これは、Pythonのキーワードforを使ったループです。「forループ」といい、くり返し作業をやる定番の方法です。forから始まる先頭行は「リストdaysOfWeekに入っている各データ(曜日)を変数dayで表す」と理解します。そしてループは次のように実行されていきます。

同様に、ループの3回目には”Wednesday”、4回目には”Thursday”がプリントされます。リストdaysOfWeekには7つのデータ(曜日)が入っているのでループは7回実行されます。つまり、”Monday”から”Sunday”までの7つの曜日が順番にプリントされます。

インデックスから値を検索する

リスト内の各データには「通し番号」が自動的に割り当てられます。この通し番号のことを「インデックス」といいます。インデックスは0から始まる整数値です。リスト内の最初のデータにインデックスの0、次のデータにインデックスの1、その次のデータにインデックスの2。。。というふうに割り当てられます。上記の例では、”Monday”のインデックスは0、”Tuesday”のインデックスは1、”Wednesday”のインデックスは2になります。

インデックス データ
0 “Monday”
1 “Tuesday”
2 “Wednesday”
3 “Thursday”
4 “Friday”
5 “Saturday”
6 “Sunday”

リストの最も基本的な使い方は、インデックスからそれに対応するデータを得る(検索する)ことです。上記の例を使うと、以下のようにします。

d = daysOfWeek[0]
print(d)

daysOfWeek[0]の部分で、リストdaysOfWeekの中からインデックス0を探し、それに対応するデータを返します。つまり”Monday”が返され、それがprint()でシェルに表示されます。もしリストの中に存在しないインデックスを使うと、エラーになります。例えば、

d = daysOfWeek[7]

とすると、「IndexError: list index out of range」というエラーメッセージがシェルに表示されます。これは「7というインデックスは存在しない」という意味です(上記の例ではインデックスは0から6までなので)。

新しいデータを追加する

既存のリストに新規データを追加するには、以下のようにします。

daysOfWeek = [ "Monday", "Tuesday", "Wednesday",
               "Thursday", "Friday", "Saturday", "Sunday"]
daysOfWeek.append("One more day!")

このようにappend()という関数を使うと、新規データをリストの最後に追加します。この例では、daysOfWeekというリストは以下のように更新されます。

[ "Monday", "Tuesday", "Wednesday",
  "Thursday", "Friday", "Saturday", "Sunday", "One more day!" ]

新規データをリストの最後に追加するのではなく、ある特定の場所に追加(挿入)するには、insert()という関数を使って挿入箇所をインデックスで指定します。

daysOfWeek = [ "Monday", "Tuesday", "Wednesday",
               "Thursday", "Friday", "Saturday", "Sunday" ]
daysOfWeek.insert(0, "One more day!")

このように、insert()には、挿入箇所(インデックス)と新規データを渡します。この例では、”One more day!”という新規データをインデックス0として(つまり最初のデータとして)挿入します。そのインデックス以降のデータはひとつづつ後ろにずらされます。したがって、daysOfWeekというリストは以下のように更新されます。

[ "One more day!", "Monday", "Tuesday", "Wednesday",
  "Thursday", "Friday", "Saturday", "Sunday" ]

リストの中に何個データが入っているかを調べるには、以下のように関数len()を使います。

daysOfWeek = [ "Monday", "Tuesday", "Wednesday",
               "Thursday", "Friday", "Saturday", "Sunday" ]
len(daysOfWeek)

この例では、len()は7を返します。

リストの中のデータを変更する

リスト内のデータを変更するには、以下のようにします。

daysOfWeek = [ "Monday", "Tuesday", "Wednesday",
               "Thursday", "Friday", "Saturday", "Sunday" ]
daysOfWeek[6] = "Sun"

ここでは、インデックス6のデータを”Sun”に変更しています。つまり、元々の”Sunday”が”Sun”に置き換わります。したがって、daysOfWeekというリストは以下のように更新されます。

[ "Monday", "Tuesday", "Wednesday",
  "Thursday", "Friday", "Saturday", "Sun" ]

リストの中のデータを削除する

インデックスを使ってリスト内のデータを削除するには以下のようにします。

daysOfWeek = [ "Monday", "Tuesday", "Wednesday",
               "Thursday", "Friday", "Saturday", "Sunday" ]
del daysOfWeek[0]

ここでは、インデックス0のデータ(つまり最初のデータ”Monday”)が削除されます。削除後、残ったデータのインデックスは適宜ずらされます。例えば、元々インデックス1だったデータはインデックス0に、元々インデックス2だったデータインデックス1になります。

インデックス データ
0 “Tuesday”
1 “Wednesday”
2 “Thursday”
3 “Friday”
4 “Saturday”
5 “Sunday”

削除したいデータを直接指定して削除することもできます。

daysOfWeek = [ "Monday", "Tuesday", "Wednesday",
               "Thursday", "Friday", "Saturday", "Sunday" ]
daysOfWeek.remove("Monday")

ここでは”Monday”が削除されます。削除後、残ったデータのインデックスは適宜ずらされます。例えば、元々インデックス1だったデータはインデックス0に、元々インデックス2だったデータインデックス1になります。

リスト内のデータを全て削除するには以下のようにします。

daysOfWeek = [ "Monday", "Tuesday", "Wednesday",
               "Thursday", "Friday", "Saturday", "Sunday" ]
daysOfWeek.clear()

自習プロジェクトの目次に戻る