【Python入門】Python のリストとは?代表的なメソッドやタプル・辞書型との違いも紹介!

【Python入門】Python のリストとは?代表的なメソッドやタプル・辞書型との違いも紹介!

こんにちは!
機械学習講師の篠原です!

篠原
篠原

18 歳から「苦手に寄り添うことを忘れない」をモットーに、集団指導塾や高校の学内予備校で教えていました!
この記事も、これから Python を学習する方向けに丁寧に書きましたのでぜひご覧ください!

Python でプログラミングをしていてよく使うのがリスト (list) です。プログラミング学習をしはじめて [] をよく見るようになったという方も多いのではないのでしょうか?

この記事では Python でのリストについて、その使い方やタプル・辞書型との違いを紹介します!

本記事はこんな方にオススメです
  • Python を学び始めてリストを使えるようになりたい方
  • [ ],( ), { } の違いを改めて復習したい方

Python でリストを使うときの基礎知識

リストとは?

Python に触れていて一番良く使うのがリストです。
目印は [ ] の形で、この中にデータを入れて扱います。

サンプルコード
numbers1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# number1 の出力
numbers1
実行結果
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

こちらのコードで、numbers1 という変数に、1~10 の数が入りました。

インデックス番号について

私たちが数を数えるとき、当たり前ですが 1, 2, 3… と数えます。

しかし、コンピュータに数えてもらうときは 0, 1, 2… と数えます

例えば [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]4 という数を選びたいとき、普段の感覚で「 4 個目とって〜」とプログラミングしてしまうと、リストの中では 「 0, 1, 2, 3, 4 個目 ← ここですね!」と受け取り、5 が出力されてしまいます。

この 0, 1, 2, … という数のことを インデックス番号 と呼びます。

Python でのリスト使用例

ではここで Python で一番使われるリストのいろいろな使用例をご紹介します。

Python を使うのに重要なものとなるので、こんなことができるんだと憶えておくといいでしょう。

先ほどご紹介した numbers1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] を使って解説します!

リストの○番目を取得

例えばリストから 3 番目の要素を取得したい場合は以下のように書きます。

リストの○番目を取得
numbers1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(numbers1[2])
実行結果
3

こちらは先ほどご紹介した「インデックス番号」ですね。

3 番目の要素がほしい時は 0 番目、1 番目、 2 番目と数えるのでこのように書きます。

リストの○番から○番を取得

例えばリストの間の 2 番目から 5 番目の要素がほしい時は以下のように書きます。

リストの○番から○番を取得
print(numbers1[1:4])
実行結果
[2, 3, 4, 5]

append() 〜リストの末尾に追加〜

リストの最後に要素を追加したい時は append を使います。

リストの末尾に追加
numbers1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# リストの末尾に追加するには append() を使う
numbers1.append(11)
print(numbers1)
実行結果
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

insert() 〜リストの○番目に追加〜

リストの途中に要素を追加したい時は insert を使います。

リストの○番目に追加
numbers1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 第一引数に追加したい場所、第2引数に追加したい要素を記述
numbers1.insert(5, 100)

print(numbers1)
実行結果
[1, 2, 3, 4, 5, 100, 6, 7, 8, 9, 10]

del() 〜リストの○番目の要素を削除〜

append と同じように削除したいインデックスを指定します。

書き方が少し違うのに注意です。

リストの○番目の要素を削除
numbers1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 3 番目を削除したい時
del numbers1[2]

print(numbers1)
実行結果
[1, 2, 3, 4, 5, 100, 6, 7, 8, 9, 10]

del() 〜リストの末尾の要素を削除〜

リストの最後の要素を削除したい時は del-1 を入れます。

リストの末尾の要素を削除
numbers1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
del numbers1[-1]

print(numbers1)
実行結果
[1, 2, 3, 4, 5, 6, 7, 8, 9]

remove() 〜リストから指定した要素を削除〜

リストから削除したい要素を直接指定して削除する場合は remove を使います。

numbers だと少し複雑になるので今回の例では文字列のリストで解説します。

リストから指定した要素を削除
strings = ['あ', 'い', 'う', 'え', 'お']
strings.remove('う')

print(strings)
実行結果
['あ', 'い', 'え', 'お']

index() 〜リストから条件に一致する要素のインデックスを取得する〜

リストの中から条件に一致する要素がリストの中で何番目にあるかを取得できます。

こちらはコードを見たほうがわかりやすいと思います。

リストから条件に一致する要素のインデックスを取得する
strings = ['あ', 'い', 'う', 'え', 'お']

strings.index('う')
実行結果
2

この場合、 があるインデックス番号が取得できます。

のインデックス番号が 0 で、 が 1, が 2 ですね!

len() 〜 リストにある要素の数をカウントする〜

リストの中に要素がいくつあるか数えるには len を使います。

リストから条件に一致する要素のインデックスを取得する
numbers1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

len(numbers1)
実行結果
10

extend() 〜リストの末尾に複数要素を追加〜

リストの最後に別のイテラブル(リスト、タプル、辞書など)の全ての要素を追加したい時は extend を使います。

リストの末尾に複数要素を追加
numbers2 = [1, 2, 3, 4, 5]
more_numbers = [6, 7, 8, 9, 10]

# リストの末尾に複数要素を追加するには extend() を使う
numbers2.extend(more_numbers)
print(numbers2)
実行結果
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

insert(i, x) 〜リストの指定位置に挿入〜

リストの特定の位置に要素を挿入したい時は insert を使います。

リストの指定位置に挿入
numbers3 = [1, 2, 4, 5]

# リストの指定位置に挿入するには insert() を使う
numbers3.insert(2, 3)  # 3番目の位置(インデックスは2)に '3' を挿入する
print(numbers3)
実行結果
[1, 2, 3, 4, 5]

pop() 〜リストから指定位置の要素を取り出す〜

リストから指定位置の要素を取り出し、その要素を削除したい時は pop を使います。

リストから指定位置の要素を取り出す
numbers4 = [1, 2, 3, 4, 5]

# リストから指定位置の要素を取り出すには pop() を使う
popped_number = numbers4.pop(2)  # 3番目の位置(インデックスは2)の要素を取り出す
print(popped_number)
print(numbers4)
実行結果
3
[1, 2, 4, 5]

clear() 〜リストから全ての要素を削除〜

リストから全ての要素を削除したい時は clear を使います。

リストから全ての要素を削除
numbers5 = [1, 2, 3, 4, 5]

# リストから全ての要素を削除するには clear() を使う
numbers5.clear()
print(numbers5)
実行結果
[]

count(x) 〜リストに含まれる要素xの数を数える〜

リストに含まれる特定の要素の数を数えるには count を使います。

リストに含まれる要素の数を数える
numbers6 = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]

# リストに含まれる要素の数を数えるには count() を使う
count_3 = numbers6.count(3)
print(count_3)
実行結果
3

sort() 〜リストの要素をソートする〜

リストの要素をソートしたい時は sort を使います。

リストの要素をソートする
numbers7 = [5, 2, 1, 4, 3]

# リストの要素をソートするには sort() を使う
numbers7.sort()
print(numbers7)
実行結果
[1, 2, 3, 4, 5]

reverse() 〜リストの要素を逆順にする〜

リストの要素を逆順にしたい時は reverse を使います。

リストの要素を逆順にする
numbers8 = [1, 2, 3, 4, 5]

# リストの要素を逆順にするには reverse() を使う
numbers8.reverse()
print(numbers8)
実行結果
[5, 4, 3, 2, 1]

copy() 〜リストのコピーを作成〜

リストのコピーを作成したい時は copy を使います。

リストのコピーを作成
numbers9 = [1, 2, 3, 4, 5]

# リストのコピーを作成するには copy() を使う
numbers9_copy = numbers9.copy()
print(numbers9_copy)
実行結果
[1, 2, 3, 4, 5]

[ ] と ( ) の違い -リストとタプル-

タプルとは?

リストを扱っていると度々遭遇するのが、タプルです。個性的な名称ですよね!
目印は ( ) の形。使い方は先ほどのリストと同じです!

サンプルコード
numbers2 = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
# number2 の出力
numbers2
実行結果
(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

numbers2 という変数に、1~10 の数が入りました。
※インデックス番号はリストと同じく、0, 1, 2・・・ と同じ数え方をします。

え?リストとタプルの違いって何!?

と感じられた方、さすがです。
実は括弧書きの形以外は見た目では変わらないのです。

篠原
篠原

しかし、リストのnumbers1 とタプルの numbers2 には違いがあります。

リストとタプルの違いとは

試しに、それぞれのデータの 3 のところを 100 に変更してみようと思います!

リストの場合

サンプルコード
numbers1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# number1 の 3 つ目の要素を 100 に置き換える
numbers1[2] = 100

これで、出力をしてみると・・・

サンプルコード
print(numbers1)
実行結果
[1, 2, 100, 4, 5, 6, 7, 8, 9, 10]

期待通り、3100にしてくれました!

タプルの場合

サンプルコード
numbers2 = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
# number2 の 3 つ目の要素を 100 に置き換える
numbers2[2] = 100
サンプルコード
print(numbers2)

これで、出力を試してみると・・・

実行結果
TypeError                               
Traceback (most recent call last)
<ipython-input-8-c30dc9a29747> in <module>

----> 1 numbers2[2] = 100

TypeError: 'tuple' object does not support item assignment

代入するところでエラーメッセージが発生してしまいました。

つまり、タプルに入れたデータは手を加えられないということがわかります。
これがタプルの性質の一つであり、リストとタプルの違いなのです。

例えば、研究データや実験データなど 1 つのデータを共有して使用する場合を想像してください。元々のデータがうっかりミスで変わる恐れがある。 こんな場合は、元々のデータに代入などできない設定の方がいいですよね?
こういう時こそ、タプルの方が好まれます。

篠原
篠原

ここまでが、リストとタプルの大きな違いです!

辞書型 { } とは ?

辞書型について解説

では次は、{} という括弧書きを見てみましょう。
これは辞書型といい、キーと値のペアでデータを管理するという特徴があります。

ここまでの復習

リストやタプルはインデックス番号(0, 1, 2, 3, 4…)で番号を割り振り、何番目と指定してデータを使用していました。

先ほどの

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

numbers1[2] = 100

というのは、 numbers1 の インデックス番号 2 の数を 100 にして!という命令なので、インデックス番号 2 (0, 1, 2) = 3 番目の数が 100 に更新され、

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

と出力されました。

辞書型もインデックス番号で管理できるのですが、例えば生徒の名簿など 0, 1, 2, 3, 4… といった数字ではなく、名前等で管理したいという場合もあると思います。
そこで、インデックス番号の役割を、もっとわかりやすい名称で補おう!ということで辞書型が使用されることもあります。
目印は { キー : 値 } の形で、この中にデータを入れて扱います。

サンプルコード
profile = {"name": "Shinohara", "Phone": "000-1111-2223" }
# 出力する
print(profile["name"])

上記コードで、 profile に中にある name に格納されたものを教えよ!という命令になるので、

実行結果
Shinohara

と出力されます。

これを活用し、例えばクラス名簿と点数を扱うときも下記のように実行できます。

サンプルコード
Score = {"Tarou": 49 , "Kana": 67 , "Hiroko": 29 }	 
# 出力する	 
print(score["Kana"])
リストの○番から○番を取得
print(numbers1[1:4])
篠原
篠原

リストの保管を工夫したバージョンという認識でいてください。リスト同様代入等が可能です。

最後に

今回は リスト・タプル・辞書型の違い についてまとめました。

まとめ

リスト → [ ] 一番良く使用する括弧書き
タプル → ( )  手を加えられない版のリスト
辞書型 → { } リストの保管を工夫したもの

リストがベースとなり、そこからタプル・辞書型に派生しているイメージです。

データの保管の仕方は、今後の Python 学習でつまづきやすいポイントの 1 つですので、ぜひ意識していきましょう!
また、Python に苦手意識がある方は、この記事も併せてご覧ください。知識がより整理されると思います!

【Invalid Syntax】Python のよくある基本的なエラーと確認方法まとめ 【Invalid Syntax】Python のよくある基本的なエラーと確認方法まとめ。初学者向けにわかりやすく解説! 【Python 入門】辞書 (dictionary) を for 文でループ処理する方法をわかりやすく解説! 【Python 入門】while 文によるループ処理を解説!else, break, continue も! 【Python 入門】while 文の使い方を解説!else, break, continue も!
篠原
篠原

これからも初学者目線でつまづくポイントをブログにて解説していきますので、他の記事もぜひご覧ください!
最後まで読んでいただきありがとうございました!

こちらの記事もオススメ

まずは無料で学びたい方・最速で学びたい方へ

まずは無料で学びたい方: Python&機械学習入門コースがおすすめ

Python&機械学習入門コース

AI・機械学習を学び始めるならまずはここから!経産省の Web サイトでも紹介されているわかりやすいと評判の Python&機械学習入門コースが無料で受けられます!
さらにステップアップした脱ブラックボックスコースや、IT パスポートをはじめとした資格取得を目指すコースもなんと無料です!

無料で学ぶ

最速で学びたい方:キカガクの長期コースがおすすめ

一生学び放題

続々と転職・キャリアアップに成功中!受講生ファーストのサポートが人気のポイントです!

AI・機械学習・データサイエンスといえばキカガク!
非常に需要が高まっている最先端スキルを「今のうちに」習得しませんか?

無料説明会を週 2 開催しています。毎月受講生の定員がございますので確認はお早めに!

説明会ではこんなことをお話します!
  • 国も企業も育成に力を入れている先端 IT 人材とは
  • キカガクの研修実績
  • 長期コースでの学び方、できるようになること
  • 料金・給付金について
  • 質疑応答