0から学ぶ【Python基礎】

Pythonのリストと辞書をマスター!基本からメソッド一覧まで

前のページ|次のページ

9章ではPythonにおける「リスト」と「辞書」の使い方について解説します。

本連載講座【Python 基礎編】では、「プログラミング未経験の方」が挫折せずにPythonの基礎を学ぶことができます。

プログラミングを始めて学ぶ方が理解できるよう、丁寧に解説しています。

さらに、学んだ内容を身につけるための演習問題も用意しています。

・Pythonを挫折せずに学習したい

・無料でPythonを確実に習得したい

このような考えを持っている方は、Tech Teacherが運営する【Python 基礎編】を用いて、Pythonの学習をすることをお勧めします!

<目次>

1章:Pythonの特徴・概要
2章:環境構築と基本操作
3章:出力関数print()
4章:数値の型(int、float)と算術演算子
5章:文字列の操作(len・抽出・結合)
6章:真偽値(True・False)・論理演算(AND、OR、NOT)・比較演算子
7章:変数
8章:if文による条件分岐
9章:リストと辞書
10章:for・whileによる繰り返し(ループ)処理
11章:関数の作り方・使い方
12章:クラスとモジュール

リストの定義

『リスト』とは、値を並べて1つのオブジェクトにまとめたものです。

Pythonにおいて、リストはlist型のオブジェクトとして扱われます。

では、まずリストの定義のしかたから見ていきましょう。

リストの定義

リストは以下のように、値をコンマ(,)で区切り、角括弧([])で両端を囲むことで定義します。

nums = [1, 3, 5, 7, 9]

print(nums)
print(type(nums))
[1, 3, 5, 7, 9]
<class 'list'>

リストに含まれる値の型は何でもよく、同一のリストの中に異なる方の値が入っていても大丈夫です。

sample_list = ['apple', 3, 10, 'grape', 'banana']

print(sample_list)
['apple', 3, 10, 'grape', 'banana']

2次元リスト(2次元配列)

リストの中に要素としてリストを入れることも可能です。

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

print(mat)
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

上の例はリストが2階層の入れ子構造になっているので、2次元リスト(二重リスト)と呼ばれます。

3次元以上のリストももちろん定義できますが、あまり頻繁に使わないのでひとまず2次元リストを扱えるようにしましょう。

リストの操作

リストのインデックス

リストの各要素にはインデックスが振られており、文字列と同じようにインデックスを指定して値を取り出したりすることができます。

1次元リストのインデックスを用いた操作は、文字列の場合とほとんど同じです。(インデックスを用いた操作については5章で詳しく解説しています。)

5章の記事はコチラ

https://www.tech-teacher.jp/blog/pythonstandard5_character/

letters = ['a', 'b', 'c', 'd', 'e']

# インデックスが0番目から始まることに注意
print(letters[3])

# 負のインデックスは末尾から何個目かを示す
print(letters[-1])

# スライスもできる
# [(開始):(終了):(間隔)]で取り出し方を指定
print(letters[1:4])
print(letters[2:5:2])
print(letters[3:1:-1])
d
e
['b', 'c', 'd']
['c', 'e']
['d', 'c']

2次元リストでは、1つ目の角括弧([])で内側のリストを指定し、さらに2つ目の角括弧([])で要素を指定することで、値を1つだけ取り出すことができます。

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

# mat[1]までで、2つ目のリストが取り出される
print(mat[1])
print(mat[1][2])
[4, 5, 6]
6

線形代数で行列に触れたことがある方は、リストを縦に積み重ねてできる行列を考え、行番号と列番号を指定していると考えると分かりやすいと思います。

2次元リスト インデックス

リストに対する関数

リストに対して操作を行うことができる主な関数4つ紹介します。

これらはよく使う関数なので、しっかり覚えておきましょう。

関数 説明
max() リストの全要素の最大値を返す
min() リストの全要素の最小値を返す
sum() リストの要素の総和を返す
sorted() 要素を並べ替えた新たなリストを返す

max()・min()

max()min()はそれぞれリストの要素の最大値と最小値を取得する関数です。

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

print(min(nums))
print(max(nums))
1
5

sum()

sum()リストの要素の総和を計算する関数です。

リストに文字列などが含まれているとエラーが出るので注意してください。

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

print(sum(nums))
15

sorted()

sorted()は、与えられたリストの要素を昇順に並べ替えた、新たなリストを返す関数です。

sorted関数は要素を並べ替えた新たなリストを返すのに対し、あとで出てくるsortメソッド元のリスト自体を書き換えます。

両者の使い分けに注意しましょう。

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

nums_sorted = sorted(nums)
print(nums) # numsはソートされていないことに注意
print(nums_sorted)
[3, 2, 5, 1, 4]
[1, 2, 3, 4, 5]

また、reverse=Trueを括弧の中に書くことで、降順に並び替えることができます。

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

nums_sort_rev = sorted(nums, reverse=True)
print(nums_sort_rev)
[5, 4, 3, 2, 1]

リストに対するメソッドと文

Pythonではリストに対して操作を行うことができるメソッドや文が豊富に用意されています。

メソッドは、リストなどオブジェクトの後に.メソッド名()と記述することで使用できます。(メソッドについては12章で詳しく解説します。)

リストに対する主なメソッド・文は以下の通りです。

メソッド 説明
append 最後尾に要素を追加する
insert インデックスで指定した位置に要素を追加する
del文 インデックスで指定した要素を削除する
remove 指定した要素を削除する
pop 指定した要素を取り出してから削除する
index 指定した要素のインデックスを返す
len リストの長さ(要素数)を返す
count 指定した要素の個数を返す
sort リストの要素を並べ替える

append・insert

appendメソッドは、リストの最後尾に要素を追加するメソッドです。

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

# 最後尾に追加
nums.append(6)
print(nums)
[1, 2, 3, 4, 5, 6]

insertメソッドは、リストの指定した位置に要素を追加するメソッドです。

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

# インデックスを指定して追加
nums.insert(2, 10)
print(nums)
[1, 2, 10, 3, 4, 5]

del

del文は、インデックスで指定した要素を削除する文です。

要素そのものではなく、インデックスを指定して削除する文であるという点に注意しましょう。

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

del nums[3]
print(nums)
[1, 2, 3, 5]

remove

removeメソッドは、指定した要素を削除するメソッドです。

こちらはインデックスではなく要素を直接指定します。

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

nums.remove(2)
print(nums)
[1, 3, 4, 5]

pop

popメソッドは、指定した要素を取り出して削除するメソッドです。
要素の取り出しと削除を同時に行いたいときに便利です。

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

number = nums.pop(4)

print(number)
print(nums)
5
[1, 2, 3, 4]

index

indexメソッドは、指定した要素のインデックスを検索するメソッドです。
指定した要素が重複している場合は、一番先頭に近いインデックスを返します。

nums = [10, 20, 30, 40, 50]
nums_2 = [10, 20, 30, 40, 50, 20, 30]

print(nums.index(10))
print(nums.index(30))
0
2

len

lenメソッド、はリストの長さを取得するメソッドです。

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

print(len(nums))
5

count

countメソッドは、指定した要素の個数を数えるメソッドです。

指定した要素が存在しない場合は0が返されます。

fruits = ['apple', 'banana', 'grape', 'apple', 'orange', 'banana']

print(fruits.count('apple'))
print(fruits.count('grape'))
print(fruits.count('peach'))
2
1
0

sort

sortメソッドは、リストの要素を昇順に並べ替えるメソッドです。

sorted関数要素を並べ替えた新たなリストを返すのに対し、sortメソッド元のリスト自体を書き換えます。

両者の使い分けに注意しましょう。

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

# sortメソッドではnums本体がソートされる(破壊的)
nums.sort()
print(nums)
[1, 2, 3, 4, 5]

またsorted関数と同様に、reverse=Trueを括弧の中に書くことで、降順に並び替えることができます。

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

nums.sort(reverse=True)
print(nums)
[5, 4, 3, 2, 1]

辞書の定義

Pythonにおける『辞書』とは、キー(名前)と値の組を並べて1つのオブジェクトにまとめたものです。

辞書はdict型のオブジェクトとして扱われます。

では、まず辞書の定義のしかたから見ていきましょう。

辞書の定義

辞書は以下のように、コロン(:)で区切ったキーと値の組をコンマ(,)で区切り、中括弧({})で両端を囲むことで定義します。

price = {'apple': 100, 'banana': 150, 'grape': 500}

print(price)
print(type(price))
{'apple': 100, 'banana': 150, 'grape': 500}
<class 'dict'>

キーの型は文字列や数値などの変更不可能なオブジェクトである必要があります。(変更可能・変更不可能なオブジェクトについては少し難しいのでここでは詳しく扱いません。)

一方、キーに対応する値の型は何でも大丈夫です。

辞書の操作

要素の参照・追加

キーを用いて要素を参照するには、以下のように角括弧([])でキーを囲います。

存在しないキーを指定するとエラーが出るので注意しましょう。

price = {'apple': 100, 'banana': 150, 'grape': 500}

print(price['grape'])
500

辞書に新たなキーと値の組を追加するには、新たなキーを角括弧([])で囲い、そこに新たな値を代入します。

price = {'apple': 100, 'banana': 150, 'grape': 500}

price['orange'] = 200
print(price)
{'apple': 100, 'banana': 150, 'grape': 500, 'orange': 200}

その他の操作

ここでは、辞書に適用すると便利な関数・メソッドを具体例とともにいくつか紹介します。

以下はここで紹介する関数・メソッドをまとめたものです。

関数・メソッド 説明
len() 辞書の長さ(キーと値の組の数)を返す
list() キーの一覧をリストとして返す
del文 キーから指定した組を削除する
getメソッド 指定したキーに対応する値を取得する
popメソッド 指定したキーに対応する値を取得し、削除する
keysメソッド キーの一覧を返す
valuesメソッド 値の一覧を返す
itemsメソッド キーと値の組(タプル)の一覧を返す

len()

len()は、キーと値の組の数(辞書の長さ)を返します

price = {'apple': 100, 'banana': 150, 'grape': 500}

print(len(price))
3

list()

list()は、各キーが要素となったリストを返します。

price = {'apple': 100, 'banana': 150, 'grape': 500}

print(list(price))
['apple', 'banana', 'grape']

del文

del文を用いて、キーと値の組を削除することができます。

del文では削除したい組のキーを指定します。

price = {'apple': 100, 'banana': 150, 'grape': 500}

del price['banana']
print(price)
{'apple': 100, 'grape': 500}

get

getメソッドは、指定したキーに対応する値を取得するメソッドです。

price = {'apple': 100, 'banana': 150, 'grape': 500}

apple_price = price.get('apple')
print(apple_price)
100

pop

popメソッドは、指定したキーに対応する値を取り出して削除するメソッドです。

price = {'apple': 100, 'banana': 150, 'grape': 500}

banana_price = price.pop('banana')
print(banana_price)
print(price)
150
{'apple': 100, 'grape': 500}

keys・values・items

keysメソッドとvaluesメソッドは、辞書に含まれるすべてのキーや値を取得するメソッドです。

これらのメソッドを用いた後にlist()を適用することで、キーや値の一覧をリストとして扱うことができます。

price = {'apple': 100, 'banana': 150, 'grape': 500}

price_keys = list(price.keys())
price_values = list(price.values())

print(price_keys)
print(price_values)
['apple', 'banana', 'grape']
[100, 150, 500]

itemsメソッドは、辞書に含まれるすべてのキーと値の組を取得するメソッドです。

itemsメソッドを適用して得られるキーと値の組は『タプル』として返されます。

タプル(tuple)とは、簡単に言うと要素が変更できないリストのようなものです。

price = {'apple': 100, 'banana': 150, 'grape': 500}

price_items = list(price.items())

print(price_items) 
[('apple', 100), ('banana', 150), ('grape', 500)]

9章の練習問題

以下の練習問題を解いてみましょう。

練習問題

問1. 次に示すリストliについて、以下の(1)~(6)のプログラムをそれぞれ書いてください。

li = [3, 2, 3, 1, 5]

(1) インデックス0-1である要素をそれぞれ出力するプログラム
(2) スライスを用いて、li先頭から2番目の値から末尾までを取り出して出力するプログラム
(3) li最小値・最大値・総和をそれぞれ出力するプログラム
(4) li末尾にint型の6を追加したのち、liの内容を出力するプログラム
(5) li長さを出力するプログラム
(6) liの内容を昇順に並べ替えたのち、並べ替えたliの内容を出力するプログラム

問2. 次に示す辞書dicについて、以下の(1)~(3)のプログラムをそれぞれ書いてください。

dic = {'apple': 100, 'banana': 150, 'grape': 500}

(1) dicのにキーbanana対応する値を出力するプログラム
(2) dicキーappleと値100の組を削除し、要素を削除した後のdicの内容を出力するプログラム
(3) dicの各キー・各それぞれリストにまとめて出力するプログラム

解答

問1(クリックして解答を表示)

li = [3, 2, 3, 1, 5]

# (1)
print(li[0])
print(li[-1])

# (2)
print(li[1:])

# (3)
print('max:', max(li))
print('min:', min(li))
print('sum:', sum(li))

# (4)
li.append(6)
print(li)

# (5)
print(len(li))

# (6)
li.sort()
print(li)
3
5
[2, 3, 1, 5]
max: 5
min: 1
sum: 14
[3, 2, 3, 1, 5, 6]
6
[1, 2, 3, 3, 5, 6]

問2(クリックして解答を表示)

dic = {'apple': 100, 'banana': 150, 'grape': 500}

# (1)
print(dic['banana'])

# (2)
del dic['apple']
print(dic)

# (3)
keys = list(dic.keys())
values = list(dic.values())
print('keys:', keys)
print('values:', values)
150
{'banana': 150, 'grape': 500}
keys: ['banana', 'grape']
values: [150, 500]



次の記事へ

Pythonのforループとwhileループを徹底解説!繰り返し処理の実装 前のページ|次のページ 10章では『for文』と『while文』による繰り返し処理について解説します。 for文の書き方、whi...