とほほのPython入門 - リスト・タプル・辞書

トップ > Python入門 > リスト・タプル・辞書

目次

リスト(list)

[...]リスト(list)を表します。

Python
a = [10, 20, 30, 40]

下記の様に改行して記述することもできます。最後のカンマ(,)は省略可能です。

Python
colors = [
    'red',
    'green',
    'blue',
]

異なる型の要素のリストを作ることもできます。

Python
a = [10, 'ABC']

リストの要素にアクセスするには for を用います。

Python
a = [1, 2, 3, 4, 5]
for n in a:
    print(n)

[n] で n番目の要素を参照します。最初の要素を 0番目と数えます。

Python
a = ['A', 'B', 'C', 'D', 'E', 'F', 'G']
a1 = a[0]       # 0番目: 'A'
a2 = a[2]       # 2番目: 'C'

[n:m] で n番目から m番目の前まで(つまり m - 1番目まで)の要素を参照します。n を省略すると最初から、m を省略すると最後までの要素を参照します。

Python
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
a1 = a[2:4]     # 2番目から3番目: [2, 3]
a2 = a[2:]      # 2番目から最後: [2, 3, 4, 5, 6, 7, 8, 9]
a3 = a[:4]      # 最初から3番目: [0, 1, 2, 3]

[n:m:s] は s個とばしで参照します。

Python
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
a1 = a[1:8:2]            # 1番目から7番目まで2個とばし: [1, 3, 5, 7]

n, m にマイナスの値を指定すると、後ろから数えます。

Python
a = ['A', 'B', 'C', 'D', 'E', 'F', 'G']
a1 = a[-1]           # 最後の文字 'G'
a2 = a[-3:-1]        # 最後から3番目の文字から最後から1番目の前の文字: ['E', 'F']

+ 演算子を用いてリストを結合することができます。

Python
print([1, 2, 3] + [4, 5, 6])       #=> [1, 2, 3, 4, 5, 6]

len() を用いてリストの個数を調べます。

Python
print(len([1, 2, 3]))          #=> 3

リストのリストを作ることも可能です。

Python
a = [[1, 2], [3, 4], [5, 6]]

for list in a:
    for n in list:
        print(n)             #=> 1 2 3 4 5 6

タプル(tuple)

(...) で要素を並べたものをタプル(tuple)と呼びます。タプルはリストとほぼ同じように使用できますが、要素を変更できない点が異なります。

Python
a = (10, 20, 30, 40)

要素がひとつだけの時は、最後にカンマ(,)を記述する必要があります。

Python
a = (10)                # タプルではなく数値の10となる
a = (10,)               # タプルの(10,)となる

リスト要素は変更することはできますが、タプル要素を変更することはできません。

Python
a1 = [10, 20, 30, 40]
a2 = (10, 20, 30, 40)

a1[2] = 60              # 代入できる
a2[2] = 60              # エラーとなり、TypeError例外が発生する

タプルからリストに変換するには list() を、リストからタプルに変換するには tuple() を使います。

Python
print(list((1, 2, 3)))    #=> [1, 2, 3]
print(tuple([1, 2, 3]))   #=> (1, 2, 3)

関数の戻り値としてタプルを返却することもできます。

Python
def get_date():
    return 2022, 10, 9

year, month, day = get_date()
print("%04d/%02d/%02d" % (year, month, day))   # 2022/10/09

辞書(dict)

{...} は、辞書(dict)と呼ばれるキーと値のペアのリストを保持します。

Python
d = {'Yamada': 30, 'Suzuki': 40, 'Tanaka': 80}

各要素には次のようにアクセスします。

Python
d1 = d['Yamada']
d2 = d['Suzuki']
d3 = d['Tanaka']

要素を追加するには次のようにします。

Python
d['Kimura'] = 60

全ての要素や値を参照するには、items(), keys(), valus(), items() を使用します。参照される要素の順序は順不同です。

Python
d = {'Yamada': 30, 'Suzuki': 40, 'Tanaka': 80}

for k, v in d.items():
    print(k, v)            # Tanaka 80, Yamada 30, Suzuki 40

for k in d.keys():
    print(k, d[k])         # Suzuki 40, Yamada 30, Tanaka 80

for v in d.values():
    print(v)               # 80, 30, 40

for k, v in d.items():
    print(k, v)            # Tanaka 80, Yamada 30, Suzuki 40

リスト関数(map(), filter(), reduce())

map() はリストの各要素に対して処理を行い、行った結果を返します。下記の例では各要素を2倍にする処理を行います。

Python
a = [1, 2, 3]

def double(x): return x * 2

print(list(map(double, a)))                  #=> [2, 4, 6] : 関数方式
print(list(map(lambda x: x * 2, a)))         #=> [2, 4, 6] : lambda方式
print([x * 2 for x in a])                    #=> [2, 4, 6] : 内包表記(後述)

filter() はリストの各要素に対して処理を行い、処理結果が真となる要素のみを取り出します。下記の例では各要素から奇数のみを取り出します。

Python
a = [1, 2, 3]

def isodd(x): return x % 2
print(list(filter(isodd, a)))              #=> [1, 3] : 関数方式
print(list(filter(lambda x: x % 2, a)))    #=> [1, 3] : lambda方式
print([x for x in a if x % 2])             #=> [1, 3] : 内包表記(後述)

reduce() はリストの最初の2要素を引数に処理を呼び出し、結果と次の要素を引数に処理の呼び出しを繰り返し、単一の結果を返します。下記の例では、各要素の合計を計算しています。

Python
from functools import reduce

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

def add(x, y): return x + y
print(reduce(add, a))                  #=> 15 : 関数方式
print(reduce(lambda x, y: x + y, a))   #=> 15 : lambda方式

リストの内包表記

リストの内包表記 を用いることで、map(), filter(), lambda を使用しないで簡単なリスト演算を行うことができます。

Python
a = [1, 2, 3]
print([x * 2 for x in a])                       #=> [2, 4, 6]
print([x * 2 for x in a if x == 3])             #=> [6]
print([[x, x * 2] for x in a])                  #=> [[1, 2], [2, 4], [3, 6]]
print([(x, x * 2) for x in a])                  #=> [(1, 2), (2, 4), (3, 6)]

b = [4, 5, 6]
print([x * y for x in a for y in b])            #=> [4, 5, 6, 8, 10, 12, 12, 15, 18]
print([a[i] * b[i] for i in range(len(a))])     #=> [4, 10, 18]

セット(set)

セット(set)は、重複の無いリストを扱います。セット同士の減算、OR、AND、XOR 操作が可能です。

Python
a = set(['red', 'blue', 'green'])
b = set(['green', 'yellow', 'white'])

print(a)               #=> set(['red', 'blue', 'green'])
print(b)               #=> set(['green', 'yellow', 'white'])
print(a - b)           #=> set(['red', 'blue'])
print(a | b)           #=> set(['red', 'blue', 'green', 'yellow', 'white'])
print(a & b)           #=> set(['green'])
print(a ^ b)           #=> set(['red', 'blue', 'yellow', 'white'])
print('green' in a)    #=> True
a.add('black')
print(a)               #=> set(['red', 'blue', 'green', 'black'])

Copyright(C) 2014-2022 杜甫々
初版:2014年12月30日、最終更新:2022年10月9日
http://www.tohoho-web.com/python/list.html