『リストとループの組み合わせ』は、プログラミングにおける基本的なテクニックの一つであり、データの操作、加工、分析など、さまざまなシナリオで有用です。
ただ、プログラミングの勉強を独学ですることって難しいです。
初心者用と書かれている参考者などがありますが、途中で挫折しても不思議ではありません。
本記事は初心者の方々が挫折しないために『これでもか!!』というくらいしつこく解説をしております。
私がプログラミングを学び始めた理由は現状から抜け出し、自分に自信を持つためでした。
皆様がモチベーションをできる限り維持したまま頑張れるための手助けをできたら嬉しく思います。

今回、コードはGoogle Colabを使用して書いています。
他のIDE(VS codeなど)を使用した場合、うまく実行できるか分かりませんので、Google Colabを使用してコードを書いてみてください。


- まずは、リストについて理解しよう
- ループの方法を理解しよう
- ループでデータを処理し、リストに追加する方法を学ぼう
- まとめ
リストとは?





こんにちは!タスカです。
まず、『リスト』とは何かについて勉強していきましょう。



『リストとは、Pythonにおけるデータのコレクションの一つで、複数の要素を順序付きで格納できるデータ構造である』
と参考書にありますが、『それで何っ!?』って感じで分かりません。
そもそもコレクションってなんですか?



そうですね。順を追って説明していきますので、安心してください。
普段の生活でコレクションという用語を聞いたことはありますか?



何となくあります。好きなものや大切なものを集めておくときに使う気がします?
それを集める人をコレクターとかいいますよね。



そうです。そうです。まさにその通り!
プログラミングの世界では、この”集める”ということをデータで行い、そのデータの集まりのことをコレクションと言います。
Pythonでのデータコレクションにはいくつかの形がありますが、今日は”リスト”に焦点を当てましょう。
リストの使い方



いきなりですが、あなたは家で料理を作りますか?
料理する時って、材料を入れる順番って大切ですよね?



料理は作りますし、順番が違うと味が変わっちゃうってことも知ってますよ。
けど、それがpythonのリストとどんな関係があるんですか?



Pythonのリストも同じで、順番にものを入れていくんですよ。
例えば、料理のレシピを考えてみましょう。
『水』、『しょうゆ』、『砂糖』、『塩』といった調味料を特定の順序で加える必要があります。
1番目:水、
2番目:しょうゆ、
3番目:砂糖、
4番目:塩
という様に調味料には入れる順番に番号がついています。



では、実際にコードを見ていきましょう。
以下のコード例をコピーして、実行してみてください。
#材料のリストを作成
recipe = ["水", "しょうゆ", "砂糖", "塩"]
# リストの内容を表示
print(recipe)
['水', 'しょうゆ', '砂糖', '塩']
リスト名 = [要素1, 要素2, 要素3, ・・・]
- リストは
[]
の中に入れたいものを,
で区切って入れていきます. - リストに入れられているそれぞれの値を要素(element)といいます。
- 要素は、先頭からインデックス(index)と呼ばれる番号が振られます。
- インデックスは、0から始まることに注意してください。



色々と聞きなれない用語が出てきますね。
リストの要素って何だったかなぁ?



要素とはリストの中に入っている個々のアイテムのことですよ。
例えば、[1, 2, 3]というリストがあったら、1、2、3がそれぞれ要素になります。



あとは、先ほどのリストの定義のところで、
インデックスは、0から始まることに注意してください。
と記載してありました。
どういう意味か説明してもらっていいですか?



ここは非常に重要なポイントなので、しっかり理解しておきましょうね。
ちなみに、リストである["水", "しょうゆ", "砂糖", "塩"]
の場合は”水”, “しょうゆ”, “砂糖”, “塩”が要素になります。recipe = ["水", "しょうゆ", "砂糖", "塩"]
を例に解説していきますね。
通常であれば、
1番目:水、
2番目:しょうゆ、
3番目:砂糖、
4番目:塩
と数えていくと思います。
しかし、Pythonはリスト内では、最初に現れる位置を0から始めて数えてくれます。
つまり、
0番目:水、
1番目:しょうゆ、
2番目:砂糖、
3番目:塩
となるのです。
なので、『1を加えること』で僕たちが普段使う数え方に変換しなくてはいけません。
リスト内の要素にアクセスする方法



リストには決まった順番があるんですね!!



はい、そうなんですよ。
では、理解を深めるために実際にコード例を見ながら解説していきますね。
下記のコードは、レシピの中から『砂糖』だけを取り出すコードです。
#材料のリストを作成
recipe = ["水", "しょうゆ", "砂糖", "塩"]
# "砂糖"にアクセス
print(recipe[2])
砂糖
- この行は、
recipe
という名前のリストを作成しています。
ここでは、レシピの材料を文字列としてリストに入れています。 - リストは角括弧
[]
で囲まれており、各アイテムはカンマ,
で区切られています。
この例では、”水”、”しょうゆ”、”砂糖”、”塩”という4つのアイテムが含まれています。 - このリストは、材料を加える順番に従っています。
つまり、最初に”水”を加え、次に”しょうゆ”、その後に”砂糖”、最後に”塩”を加えることを意味します。
- この行では、
print
関数を使って、recipe
リストの3番目のアイテムにアクセスしています。
Pythonでは、リストのインデックス(位置を指定する数値)は0から始まるため、recipe[2]
はリストの3番目のアイテムを指します。 recipe[2]
によって、リストrecipe
の中から”砂糖”という文字列が選ばれます。
なぜなら、”水”が0番目、”しょうゆ”が1番目、そして”砂糖”が2番目に位置するからです。print
関数は、指定された値やメッセージを画面に表示する命令です。
この場合、”砂糖”という文字列が出力(画面に表示)されます。



ここでの注意は、
リストは0から数えるので、”砂糖”はインデックス2にしないといけませんね!
A = [要素1, 要素2, 要素3, ・・・・]というリスト内の要素を参照する場合
ただし、インデックスは、0から始まるprint(A[インデックス])
リスト内の要素の特定の位置を見つける方法



プログラミングでは、リスト内の特定のアイテムの位置を見つけることがしばしばあります。
例えば、レシピで『砂糖』を加える順番を知りたいとします。
Pythonでは、これを簡単に見つけることができます。
#材料のリストを作成
recipe = ["水", "しょうゆ", "砂糖", "塩"]
print(recipe.index("砂糖") + 1,"番目" )
3番目
- この行では、
recipe
リスト内で”砂糖”が何番目にあるかを調べています。.index("砂糖")
は”砂糖”というアイテムのインデックス(位置)を返します。
Pythonではリストのインデックスは0から始まるため、”砂糖”はリスト内で2番目の位置にありますが、0から数え始めるとインデックスは2となります。 - 人間が一般的に使う数え方に合わせるために、得られたインデックスに1を足しています。
これにより、”砂糖”が実際にはリストの3番目にあるということが分かります。 print
関数を使用して、計算結果と”番目”という文字を組み合わせて出力します。
これにより、画面には”3 番目
“と表示され、”砂糖”がレシピの材料リストの中で3番目に位置することが分かります。
A = [要素1, 要素2, 要素3, ・・・・]というリストの中の要素の順番が知りたい時
Print(A.index("要素") + 1 )
リスト要素の合計と要素数の取得(sum関数とlen関数)



リストについて色々と学んできましたね!
今度は、Pythonでリストの要素を合計する方法と、リストの要素数を知る方法を学びましょう。



要素ってリストの中に入っている個々のアイテムのことでしたよね。
例えば、[1, 2, 3]というリストがあったら、1、2、3がそれぞれ要素になるんですよね!!



よく覚えていましたね!
pythonには、リスト中のその要素を全部足す便利な方法があるんですよ。
リストの中の数値の合計を計算するには、Pythonに組み込まれているsum
関数を使用します。
例えば、こんな感じです。
# 数値のリストを作成
numbers = [1, 2, 3, 4, 5]
# 要素の合計を計算
total = sum(numbers)
# 合計を表示
print("合計:", total)
合計: 15
A = [要素1, 要素2, 要素3, ・・・・]というリスト内の要素を合計する場合
sum(A)



そして、リストの要素数、つまりリストの中にいくつアイテムがあるかを知りたいときは、len
関数を使います。
# 数値のリストを作成
numbers = [1, 2, 3, 4, 5]
# 要素数を取得
count = len(numbers)
# 要素数を表示
print("要素数:", count)
要素数: 5
A = [要素1, 要素2, 要素3, ・・・・]というリスト内の要素数を取得する場合は
len(A)



意外とsum
とlen
の使い方はシンプルですね。



sum
はリストの中の数を全部足し合わせる関数で、len
はリストの長さ、つまり要素数を教えてくれる関数です。
今後、データの集計や分析を行う時があれば際に非常に役立つので覚えておきましょう。
リスト要素の追加・削除・変更の仕方(append,remove)



これがリストの学習の最後の項目ですので、頑張りましょう!
今日はPythonのリストで、要素を追加、削除、変更する方法を学びます。



要素を追加するって、どういうことですか?



例えば、あなたが飲み会の幹事だとします。
飲み会に急に参加できる人が増えた場合を考えてみてください。
飲み会の参加者のリストがあれば、そのリストに新しく追加しないといけませんよね?



確かに必要な作業です。
リストにどうやって追加するんですか?



要素の追加にはappend
を使用します。
例えば、飲み会参加者のリストがあって、新しい参加者を追加したくなった場合はこうします。
# 飲み会参加者
guest = ["つよし","ごろう","たくや","しんご","まさひろ"]
# 新しい参加者
guest.append("かつゆき")
# リストを表示
print(guest)
['つよし', 'ごろう', 'たくや', 'しんご', 'まさひろ', 'かつゆき']



追加された値は、リストの一番後ろに追加されますよ!
A = [要素1, 要素2, 要素3, ・・・・]というリスト内に要素を追加する場合
指定した値が、リストの末尾に新たな要素として追加されるA.append(リストに追加したい値)



急な予定が入ってしまい、キャンセルすることになったらリストか削除することもできるんですか?



削除も簡単にできますよ。
削除にはremove
を使います
例えば、”たくや”が急な都合で飲み会に来れなくなって、削除したい場合はこうします。
# 飲み会参加者
guest = ["つよし","ごろう","たくや","しんご","まさひろ"]
# たくやをリストから削除
guest.remove("たくや")
# リストを表示
print(guest)
['つよし', 'ごろう', 'しんご', 'まさひろ']
A = [要素1, 要素2, 要素3, ・・・・]というリスト内から要素を削除する場合
A.remove(リストから削除したい値)



例えば、参加者が変更になった場合に名前を変えることはできますか?



もちろんできますよ。
要素の変更は、直接インデックスを指定して新しい値を代入することで行います。
例えば、参加者”たくや”が参加できなくなって、代わりに”しずか”が参加する場合を考えてみましょう。
# 飲み会参加者
guest = ["つよし","ごろう","たくや","しんご","まさひろ"]
# "たくや"を""しずか"に変更
guest[2] = "しずか"
# リストを表示
print(guest)
['つよし', 'ごろう', 'しずか', 'しんご', 'まさひろ']
A = [要素1, 要素2, 要素3, ・・・・]というリスト内の要素を変更する場合
A[変更要素のインデックス] = 変更後の値
リスト内のスライスによる範囲指定



リスト内の基本的な使い方は、これで大丈夫でしょう。
あとは、うーん、一応紹介しておきますね。



ちょっと高度な内容ななりますか?



ここまでついて来れてたら大丈夫ですよ!
Pythonのリストで、スライスというリストの中から特定の範囲の要素を取り出す方法を勉強していきましょう。



どういうことですか?



例えば、あるリストから2番目から4番目までの要素だけを見たいときがあるとします。
そんなときにスライスを使えば楽ちんですよ。こんな感じで。
# 数字のリストを作成
numbers = [0, 1, 2, 3, 4, 5, 6]
# 2番目から4番目までの要素を取り出す
slice_numbers = numbers[1:4]
# 結果を表示
print(slice_numbers)
[1, 2, 3]
A = [要素1, 要素2, 要素3, ・・・・]というリスト内の中間の要素を取り出す場合
開始インデックスは範囲の開始位置を指定します。この位置の要素を含みますA[開始インデックス : 終了インデックス]
終了インデックスは範囲の終了位置を指定しますが、この位置の要素は含まれません。



開始インデックスや終了インデックスを省略することもできますよ。
最初に、終了インデックスを省略した例を見てみましょう。
# 数字のリストを作成
numbers = [0, 1, 2, 3, 4, 5, 6]
# インデックスが2から最後まで取得する
slice_numbers = numbers[2:]
# 結果を表示
print(slice_numbers)
[2, 3, 4, 5, 6]



numbers[2:]と
書くことで、インデックスが2から最後の値まで取得します。
つまり『2(2番目)、3(3番目)、4(4番目)、5(5番目)、6(6番目)』の要素を取り出します。



終了インデックスを省略した場合は、指定したインデックスの値は含まれるんですね!



よく気づきましたね!その通りです。
次に、開始インデックスを省略した例をみていきましょう。
# 数字のリストを作成
numbers = [0, 1, 2, 3, 4, 5, 6]
# 最初からインデックス5まで取得する
slice_numbers = numbers[:5]
# 結果を表示
print(slice_numbers)
[0, 1, 2, 3, 4]



numbers[:5]
と書くことで、最初からインデックス5までを取得します。
つまり、『0(0番目)、1(1番目)、2(2番目)、3(3番目)、4(4番目)』の要素を取り出します。



一方で開始インデックスを省略した場合は、指定したインデックスは含まれないですね。



その通りですね!
ここは非常に混乱しやすいので、しっかり覚えて定着しましょう
A = [要素1, 要素2, 要素3, ・・・・]というリスト内で特定の要素を取り出す場合
終了インデックスを省略すると、リストの最後まで選択されます。A[開始インデックス : ] 特定の位置からリストの最後まで
A[ : 終了インデックス] リストの最初から特定の位置まで
開始インデックスを省略すると、リストの最初から選択が始まります。



ちなみに、[:]
だけを指定すると、すべての要素を参照することも覚えておきましょう!
A = [要素1, 要素2, 要素3, ・・・・]というリスト内の全ての要素を取り出す場合
A[:]
負の数による指定



ついでにリストの後ろから要素を数える方法も解説しておきますね。
負のインデックスを使用すると、リストの末尾から要素を指定できます。
-1は最後の要素、-2は最後から二番目の要素を表します。
例えば、リストの最後の3つの要素を取り出したい場合は、以下のようにします。
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 後ろから7番目から後ろから2番目までの要素を取り出す
reverse_middle = numbers[-7:-2]
print(reverse_middle)
[3, 4, 5, 6, 7]
A = [要素1, 要素2, 要素3, ・・・・]を負の数で指定して取り出す方法
A[-1]
: リストの末尾の要素はインデックス[-1]で参照A[-2]
: 最後から2つ目の要素を参照
ループについて(for文)





ここからはリストをループを使って、追加する方法を学んでいきましょう。



ループって何ですか?



ループっていうのは、同じことを何度も繰り返すための方法ですよ。
Pythonのループには主に2つの使い方があります。
一つ目は、コレクションの全要素に対して操作を行う方法です。
二つ目は、特定の回数だけ操作を繰り返す方法です。



コレクションとは『データの集まり』でしたよね。
それぞれのループの使い方の違いを教えてください。



まず、コレクションの全要素に対して操作を行う方法です。
コレクションの一つに先ほど学習した『リスト』がありましたね。
リストの全要素に対して、ループを使用してみましょう。
ループはfor 文
というものを使います。
リストの全要素に対して、ループを使用場合
例えば、ファイルから読み込んだデータのリストがあって、それぞれのデータに対して処理を行いたい場合、考えてみましょう。
例えば、『1、5、10、20、50、100、200、500、550』という値を持つデータがあるとします。
このデータのリスト内全ての値に『10』を足す処理を考えてみましょう。
# データのリスト
data = [1, 5, 20, 50, 100, 200, 500, 550]
# 各データに10足して表示
for d in data:
print(d + 10)
11
15
30
60
110
210
510
560



for d in data:
print(d + 10)
について質問です。
print(d + 10)のコードは行の始めに少しスペースが空いてますが、これは理由があるんですか?



とても良い質問ですね。
ちなみに、文章を書くときに行の始めを少し空けることをインデントといいます。for d in data:
print(d + 10)
は、
for文よりも一段深くインデントして書かれていますね。
このようにインデントして書く”とは、プログラミングにおける一つの基本的なルールです。
“for”文を使ってループを作成する場合、そのループ内で実行したい各命令は”for”文よりも一段深くインデントする必要があります。
これにより、どの命令がループの範囲内で実行されるべきかをPythonが理解できるようになります。
つまり、インデントはプログラムの構造を明確にし、エラーを防ぐ役割も果たすのです。
一般的にはインデントは、半角スペースを2個、4個、8個のいずれかにすることが多いです。
特にこだわりがなければ、pythonの標準コーディング規約でもあるPEP8で推奨されている4個にすることをお勧めします。
- この行では、
data
という名前のリストを作成しています。リストとは、複数の値をカンマで区切り、角括弧[]
で囲んだものです。 data
リストには、8つの整数が含まれています。これらは、この後のループで一つずつ取り出され、処理されます。
- ここで
for
ループを使っています。for
ループは、リストや他のコレクションの各要素に対して繰り返し処理を行うときに使われます。 for
ループを使うと、リストの中のものを一つずつ見ていくことができます。for d in data:
と書くと、「data
というリストに入っているものを、先頭から順にd
という名前で取り出し、そのたびに処理を実行してくだい」と命令しているのです。
- 必ず、インデントを用いてコードを書いてください。
- この行は
for
ループの内部に書かれているため、ループの各ステップで実行されます。このコードは、変数d
に格納されている数値に10を足した結果を計算し、その結果を画面に表示します。 print
関数は、括弧内の値を画面に出力するために使われます。ここでは、各ステップでd + 10
の計算結果が出力されます。- 例えば、最初のステップでは
d
は1なので、出力は1 + 10 = 11
となります。次のステップではd
は5になるので、出力は5 + 10 = 15
となり、このプロセスがリストの最後の要素まで続きます。
for文でリスト内の全要素を参照する方法
最後のfor 変数 in リスト :
繰り返し処理
:
を忘れないように!
for文以下のコードはインデントして書く!
特定の回数だけ操作を繰り返す方法



次は、特定の回数だけ操作を繰り返す方法を学習していきましょう。
Pythonで特定の回数だけ処理を繰り返したい場合、”range”関数を使う方法があります。
range”関数は大きく分けて3つの使い方があります。
for i in range(5):
print(i)
0
1
2
3
4
このコードでは、range(5)
が0から4までの数字を生成し、for
ループがそれらの数字を一つずつ取り出してi
に代入します。そして、print(i)
が各i
の値を表示します。
for i in range(5, 10):
print(i)
5
6
7
8
9
ここでは、range(5, 10)
が5から9までの数字を生成します。この範囲内の各数字はループで一つずつ処理され、表示されます。
for i in range(0, 10, 2):
print(i)
0
2
4
6
8
この場合、range(0, 10, 2)
は0から始まり、2つごとに数を増やして9まで(実際には8まで)の偶数を生成します。for
ループはこれらの数を一つずつ取り出して処理します。
for 変数 in range():
ループでデータを処理し、リストに追加する方法を学ぼう



それでは、最後にリストとループを使って一週間の勉強計画を立てるためのプログラムを考えてみましょう。
一週間の勉強計画を立てるためのプログラム
このプログラムでは、あらかじめ定められた勉強すべきリストから、ユーザーが各曜日にどんな勉強をするかを入力できるようにします
そして、入力された計画を保存し、最後に全体の勉強計画を表示します。
このプログラムは、『リスト、for
文、print
関数、input
関数』を基本として作成します。
# 勉強すべきリスト
study_topics = ["ライティング", "マーケティング", "python", "HTML", "CSS", "java script", "ワードプレス"]
# 各曜日の勉強計画を保存するためのリスト
weekly_study_plan = []
# 曜日のリスト
days_of_the_week = ["月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日", "日曜日"]
print("一週間で勉強すべきリスト:")
for topic in study_topics:
print(topic)
# 各曜日について、どのトピックを勉強するかをユーザーに尋ねる
for day in days_of_the_week:
print(f"\n{day}には、上記のリストから勉強するトピックを一つ選んでください。")
topic = input("今日はどんな勉強をしますか?: ")
# ユーザーからの入力をリストに追加
weekly_study_plan.append(topic)
# 入力された週間の勉強計画を表示
print("\n一週間の勉強計画:")
for day, topic in zip(days_of_the_week, weekly_study_plan):
print(f"{day}: {topic}")
一週間で勉強すべきリスト:
ライティング
マーケティング
python
HTML
CSS
java script
ワードプレス
月曜日には、上記のリストから勉強するトピックを一つ選んでください。
今日はどんな勉強をしますか?: ワードプレス、python
火曜日には、上記のリストから勉強するトピックを一つ選んでください。
今日はどんな勉強をしますか?: マーケティング
水曜日には、上記のリストから勉強するトピックを一つ選んでください。
今日はどんな勉強をしますか?: マーケティング
木曜日には、上記のリストから勉強するトピックを一つ選んでください。
今日はどんな勉強をしますか?: CSS,HTML
金曜日には、上記のリストから勉強するトピックを一つ選んでください。
今日はどんな勉強をしますか?: python,ライティング
土曜日には、上記のリストから勉強するトピックを一つ選んでください。
今日はどんな勉強をしますか?: ライティング
日曜日には、上記のリストから勉強するトピックを一つ選んでください。
今日はどんな勉強をしますか?: java script,マーケティング
一週間の勉強計画:
月曜日: ワードプレス、python
火曜日: マーケティング
水曜日: マーケティング
木曜日: CSS,HTML
金曜日: python,ライティング
土曜日: ライティング
日曜日: java script,マーケティング
study_topics
という名前のリストを作成し、その中に一週間で勉強すべき7つのトピックを文字列の形で保存しています。
リストは複数のアイテムを保存できるデータ構造です。
weekly_study_plan
という名前の空のリストを作成しています。このリストは、ユーザーが各曜日に勉強するトピックを保存するために使用されます。



なぜ、空のリストを作成したのかよくわかりません



空のリストを作るのは、データを格納するための容器を用意するようなものです。weekly_study_plan
というリストには、始めは何も入っていませんが、一週間の勉強計画を入れていくためのスペースとして使います。



それで、後で好きなデータを追加できるんですね。



正解!
それぞれの曜日にどんな勉強をするかを決めたら、その情報をリストに追加していきます。
これにより、計画を柔軟に管理できるようになるんです。
days_of_the_week
というリストに、週の各日を文字列として保存しています。
これは後でユーザーにどの曜日の勉強計画を尋ねるために使います。
print
関数を使って、画面にメッセージを表示しています。
ここでは、ユーザーに一週間で勉強すべきトピックのリストが表示されることを伝えています。
print(topic)の解説
for
ループを使って、study_topics
リストの各トピックを一つずつ取り出し、画面に表示しています。
このループにより、ユーザーは勉強すべきトピックを確認できます。
このfor
ループは、days_of_the_week
リストの各日について繰り返します。
つまり、月曜日から日曜日まで、各曜日に対してループ内のコードが実行されます。
print
関数を使い、ユーザーにその曜日に勉強するトピックを選んで入力するように促します。\n
は改行を意味し、メッセージを見やすくしています。
input
関数を使って、ユーザーからの入力を受け取り、それをtopic
変数に保存しています。
ユーザーが入力したテキストは、その曜日に勉強するトピックとしてリストに追加されます。
append
を使い、ユーザーが入力したトピックをweekly_study_plan
リストに追加しています。
一週間の勉強計画を表示する前に、このメッセージを表示しています。
print(f”{day}: {topic}”)の解説
for
ループとzip
関数を使って、days_of_the_week
リストとweekly_study_plan
リストの要素を組み合わせています。
そして、各曜日とその日に勉強するトピックを表示しています。



zip
関数とは何ですか?



これは、二つのリストの要素を一つずつ組み合わせて、新しいペアを作ることができます。
zip関数を使うと、複数のリストの情報を合わせて、扱いやすくすることができます。
fruits = ["りんご", "バナナ"]
colors = ["赤", "黄色"]
# zip関数を直接forループで使用
for fruit, color in zip(fruits, colors):
print(f"{fruit}は{color}です")
りんごは赤です
バナナは黄色です
zip関数を使って、A=[], B=[]というリストを合わせる場合
for 変数1,変数2 in zip(A,B):
まとめ
お疲れ様でした。
思った以上に長い内容になってしまいましたが、『リストとfor文』について理解していただけたら幸いです。




コメント