データの整理整頓術:Pythonにおけるリストと配列の基礎をマスターしよう
![]()
【Yuki】
あ、ひろき君。こんにちは……。今日もプログラミングの学習、頑張っているんですね。
今日は、Pythonでたくさんのデータをまとめて扱うための「リスト」や「配列」について、一緒に勉強していけたらな……と思っています。
![]()
【Hiroki】
Yukiさん、こんにちは!はい、よろしくお願いします。
これまで変数については少し触れてきたんですけど、データが10個も20個も増えてくると、一つずつ変数を作るのは大変そうだなって思っていたところなんです。
![]()
【Yuki】
そうですね。データが増えてくると、それらを一つの「まとまり」として管理する必要が出てきます。
Pythonにはいくつかのデータのまとめ方があるのですが、まずは最も基本的でよく使われる「リスト(List)」からお話ししますね。
あ……わたし、実は文房具を集めるのが好きで……。お気に入りの万年筆やカラーペンをペンケースに順番に並べていくような、そんな感覚に近いかもしれません。
そもそも「配列」や「リスト」って何?
![]()
【Hiroki】
ペンケースに並べる感覚……ですか。なんとなくイメージが湧きそうです。
でも、よく「配列」という言葉も聞くんですけど、Pythonの「リスト」とは何が違うんでしょうか?
![]()
【Yuki】
いい質問ですね……。厳密に言うと、他のプログラミング言語(C言語やJavaなど)での「配列」は、入れるデータの型や数が決まっていることが多いんです。
一方で、Pythonの「リスト」は、異なる種類のデータ(数値や文字列など)を混ぜて入れることができますし、後からサイズを自由に変えることもできる……とても柔軟な仕組みなんですよ。
「配列」という大きなカテゴリーの中に、Python特有の便利な「リスト」がある、と考えておけば今は大丈夫だと思います……。
Pythonのリストを作ってみよう
![]()
【Hiroki】
なるほど、Pythonのリストはすごく自由度が高いんですね!
具体的にはどうやって書くんですか?
![]()
【Yuki】
リストを作るには、中身を [] (角括弧)で囲んで、それぞれの要素を , (カンマ)で区切ります。
例えば、好きな数字を並べる場合はこんな風に書きます……。
# リストの作成
numbers = [10, 20, 30, 40, 50]
print(numbers)
# 文字列のリスト
fruits = ["apple", "banana", "cherry"]
print(fruits)
![]()
【Hiroki】
おぉ、これだけでいいんですね!これならたくさんのデータを一度に管理できそうです。
このリストの中から、特定のデータだけを取り出したいときはどうすればいいんですか?
![]()
【Yuki】
特定の要素を取り出すには、「インデックス(添字)」という番号を使います。
ここで注意が必要なのが、番号は「1」からではなく「0」から始まる……ということです。
わたしも時々、うっかり1番目から数えてしまって、エラーを出してしまうことがあるんですけど……。
インデックスとスライシング
![]()
【Hiroki】
0から始まる……プログラミング特有の数え方ですね。
3番目のデータを取り出したいときは、インデックスは「2」になるっていうことですよね?
![]()
【Yuki】
その通りです、正解です……!
実際にコードで書いてみると、こんな感じになります。
fruits = ["apple", "banana", "cherry", "orange"]
# 0番目(最初)の要素を取得
print(fruits[0]) # apple
# 2番目の要素を取得
print(fruits[2]) # cherry
# マイナスの数字を使うと、後ろから数えることもできます
print(fruits[-1]) # orange(一番最後)
![]()
【Hiroki】
後ろから数えることもできるんですね!それは便利そうです。
リストの一部をまとめて取り出す方法もあるんでしょうか?
![]()
【Yuki】
はい、「スライシング」という機能があります。
リスト名[開始位置:終了位置] と書くことで、指定した範囲を抜き出すことができるんです。
ただ、終了位置に指定したインデックスの要素は「含まれない」ので、そこだけ注意が必要かもしれません……。
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# インデックス2から5の直前まで(2, 3, 4)
print(numbers[2:5])
# 最初から4の直前まで
print(numbers[:4])
# 5から最後まで
print(numbers[5:])
リストの操作:要素の追加と削除
![]()
【Hiroki】
スライスも使いこなせると、データの加工が楽になりそうですね。
リストを作った後に、新しいデータを追加したり、逆に消したりすることもできますか?
![]()
【Yuki】
もちろんです。リストは中身を自由に変えられるのが大きな特徴ですから……。
要素を追加するには append()、特定の場所に入れたいときは insert()、削除するには remove() や pop() を使います。
stationery = ["pen", "notebook"]
# 末尾に追加
stationery.append("eraser")
print(stationery) # ['pen', 'notebook', 'eraser']
# 指定した位置(インデックス1)に挿入
stationery.insert(1, "ruler")
print(stationery) # ['pen', 'ruler', 'notebook', 'eraser']
# 値を指定して削除
stationery.remove("notebook")
print(stationery) # ['pen', 'ruler', 'eraser']
# 最後の要素を取り出して削除
last_item = stationery.pop()
print(last_item) # eraser
print(stationery) # ['pen', 'ruler']
![]()
【Hiroki】
これなら、状況に合わせてリストの中身をどんどん更新していけますね。
でも、Yukiさん。一度決めたら絶対に書き換えたくないデータがある場合はどうすればいいんでしょうか?
書き換えられない「タプル」
![]()
【Yuki】
あ……いいところに気がつきましたね。
リストのように便利ですが、一度作ったら中身を変更できないデータ型として「タプル(Tuple)」というものがあります。
タプルは () (丸括弧)を使って作ります。
# タプルの作成
dimensions = (1920, 1080)
# 読み込みはリストと同じ
print(dimensions[0]) # 1920
# 書き換えようとするとエラーになります
# dimensions[0] = 1280 # ここでTypeErrorが発生します
![]()
【Hiroki】
変更できないからこそ、誤ってデータを書き換えてしまう心配がない、というメリットがあるんですね。
設定値や、座標のようなデータを扱うのに向いてそうです。
![]()
【Yuki】
そうですね……。プログラムの中で「これは変えないぞ」という意思表示にもなるので、適切に使い分けると綺麗なコードになると思います。
キーで値を管理する「辞書」
![]()
【Hiroki】
リストやタプルは「順番」で管理していましたけど、名前とかラベルで管理したい場合はどうすればいいですか?
例えば、ユーザー名に対して点数が紐付いているようなデータです。
![]()
【Yuki】
そういう時は「辞書(Dictionary)」という型を使います。
「キー(Key)」と「値(Value)」をペアにして保存する仕組みです。
現実の辞書で、単語(キー)を引いて意味(値)を調べるのと似ていますね……。
# 辞書の作成
scores = {"Hiroki": 85, "Yuki": 92, "Mei": 78}
# キーを使って値を取得
print(scores["Hiroki"]) # 85
# 新しいデータの追加や更新
scores["Taro"] = 60
scores["Yuki"] = 95 # 値の更新
print(scores)
![]()
【Hiroki】
これはすごく直感的ですね!順番を覚えなくていいので、複雑なデータを扱う時に重宝しそうです。
重複を許さない「集合(セット)」
![]()
【Yuki】
辞書の他にも、少し特殊な「集合(Set)」というものもあります。
これは、数学の集合と同じで、同じ値が重複して入らない……という特徴があります。
順番も保持されないのですが、データの重複を取り除きたい時などにすごく便利です。
# 集合の作成
my_set = {1, 2, 2, 3, 3, 3}
print(my_set) # {1, 2, 3} ※重複が消える
# 要素の追加
my_set.add(4)
![]()
【Hiroki】
へぇー!勝手に重複を消してくれるんですね。
アンケートの結果から回答者の種類を数えたい時とかに使えそうです。
本格的な数値計算には「NumPy」の配列
![]()
【Yuki】
さて、ここまではPython標準の機能を紹介してきましたが、実は「配列」という言葉を一番よく使う場面が他にもあります。
データサイエンスや機械学習の分野で欠かせない「NumPy(ナンパイ)」というライブラリです。
![]()
【Hiroki】
NumPy……。名前は聞いたことがあります!
![]()
【Yuki】
Pythonの標準リストはとても柔軟なのですが、大量の数値計算をするには少し速度が遅いという欠点があるんです……。
そこで、数値計算に特化した「NumPy配列(ndarray)」が使われます。
これは、同じ型のデータしか入れられませんが、その分、計算が非常に高速で、行列計算などが簡単に行えるようになっています。
import numpy as np
# NumPy配列の作成
arr = np.array([1, 2, 3, 4, 5])
# すべての要素を一度に2倍にする(リストでは難しい操作)
print(arr * 2) # [ 2 4 6 8 10]
![]()
【Hiroki】
リストだと、全部の要素を2倍にするにはループを回さないといけないですよね?
arr * 2 だけで済むなんて、魔法みたいです……!
![]()
【Yuki】
ふふ……。そうですね。大量のデータを扱う時は、このNumPyの配列が主役になります。
ただ、今はまず標準の「リスト」をしっかり使いこなせるようになることが大切かな……と思います。
どのデータ型を選べばいいの?
![]()
【Hiroki】
リスト、タプル、辞書、集合、そしてNumPyの配列……。
たくさんあって、どれを使えばいいか迷っちゃいそうです。
![]()
【Yuki】
最初は迷いますよね……。簡単にまとめると、こんな風に選んでみるといいかもしれません。
- 順番が大切で、後から中身を変えたいなら → リスト
- 順番が大切だけど、後から変えたくないなら → タプル
- 名前(キー)と値をセットで管理したいなら → 辞書
- 重複を許さず、順番も気にしないなら → 集合
- 大量の数値計算を高速に行いたいなら → NumPy配列
![]()
【Hiroki】
すごく分かりやすいです!
まずはリストをメインに使いつつ、他のものも少しずつ試していこうと思います。
![]()
【Yuki】
ええ、その意気です……。
コードを書いていて、データが綺麗に整理されていくのを見ると、なんだか心が落ち着きますよね。
フォントの並びが整っているWebサイトを見たときのような……そんな気持ちよさが、プログラミングのデータ構造にもある気がします。
![]()
【Hiroki】
あはは、Yukiさんらしい例えですね。
僕もまずは、自分の持ち物を整理するような感覚でリストを使ってみます。
![]()
【Yuki】
……はい。もし分からなくなったら、いつでも聞いてくださいね。
わたしも、ひろき君の力になれるように……もっと勉強しておきますから。
あ、参考になりそうなサイトもいくつか置いておきますね。もしお時間があれば、夜にでも眺めてみてください……。
参考資料
![]()
【Hiroki】
ありがとうございます!さっそくチェックしてみます。
次は、これらのリストを「繰り返し処理」で使う方法も教えてください!
![]()
【Yuki】
はい、喜んで……。
繰り返し処理(for文)とリストは、切っても切れない関係ですからね。
次はもっと、プログラミングらしい動きが作れるようになりますよ。楽しみにしていてくださいね……。
「配列」のサンプルコードを見る
この記事では基礎を解説しましたが、実務においては「もっと複雑なデータを扱いたい」「独自のシステムに組み込みたい」といった、個別の課題に直面することも多いはずです。
「自分で書く時間は最小限に抑え、プロの品質でツールを完成させたい」という方は、ぜひ一度ご相談ください。
- 専門家の知見に基づいた、保守性の高いコード設計
- AIの専門家による、Gemini API等の最新AIを組み合わせた高度な自動化
- ChatGPT等が生成したコードのデバッグ・最適化
「教わる」だけでなく「形にする」パートナーとして、フリーランスエンジニアのmei_13が最短ルートでの解決をサポートします。


