Pythonのデータ型の中で、値を複数持つことのできるリスト・タプル・辞書・集合について調べてみます。
Pythonのバージョンは3.7.0を使用しています。
リスト型
リストの使い方は全体を大括弧[] で囲って、値をカンマで区切ります。
値の取得はインデックス番号を指定する形で、末尾から数える場合はマイナスの値になります。
list = ['A', 'B', 'C', 'D', 'E'] print(list) # ['A', 'B', 'C', 'D', 'E'] print(list[0]) # 'A' print(list[-1]) # 'E'
文字列を分割して配列を作成することもできます。
url = 'https://cly7796.net/blog/'
list = url.split('/')
print(list) # ['http:', '', 'cly7796.net', 'wp', '']
| string.split(sep) | 文字列stringをsepの値で区切ってリストにする。 |
|---|
スライス
次のようにコロンを使ってリストのスライスもできます。
list = ['A', 'B', 'C', 'D', 'E'] print(list[2:]) # ['C', 'D', 'E'] print(list[:2]) # ['A', 'B'] print(list[1:3]) # ['B', 'C'] print(list[:]) # ['A', 'B', 'C', 'D', 'E'] print(list[::2]) # ['A', 'C', 'E']
list[2:]の場合はインデックスの2番目から最後まで、list[:2]の場合は最初から2番目まで、list[1:3]の場合はインデックスの1番目から3番目まで、list[:]の場合はすべてをスライスします。
後ろにさらにコロンを付けることで、いくつおきにスライスするかも指定できます。
| list[start:end(:step)] | start位置からend位置までの値を取得。 省略した場合はstartが0でendが要素数(最後まで取得)になる。 stepが設定されている場合はその値分ステップしながら取得。 |
|---|
演算
リスト同士の連結や乗算もできます。
list = ['A', 'B', 'C'] list2 = [1, 2, 3] print(list + list2) # ['A', 'B', 'C', 1, 2, 3] print(list * 2) # ['A', 'B', 'C', 'A', 'B', 'C']
追加・変更・削除
要素の追加や変更、削除をやってみます。
list = ['A', 'B', 'C'] # 変更 list[0] = 1 print(list) # [1, 'B', 'C'] # 追加 list.append(4) print(list) # [1, 'B', 'C', 4] list[1:3] = [2, 3] print(list) # [1, 2, 3, 4] list.extend([5, 6]) print(list) # [1, 2, 3, 4, 5, 6] list.insert(0, -1) print(list) # [-1, 1, 2, 3, 4, 5, 6] # 削除 list.remove(6) print(list) # [-1, 1, 2, 3, 4, 5] pop = list.pop(4) print(pop) # 4 print(list) # [-1, 1, 2, 3, 5] del list[0] print(list) # [1, 2, 3, 5] del list[1:3] print(list) # [1, 5] list.clear() print(list) # []
| list.append(x) | リストの最後にxを追加。 |
|---|---|
| list.extend(iterable) | リストの最後にiterableを追加。 |
| list.insert(index, x) | indexの位置にxを追加。 |
| list.remove(x) | リスト内の最初のxの要素を削除。 リストにxの要素がない場合はエラー。 |
| del list[index] | リストからindexの位置の要素を削除。 スライスの形で指定することも可能。 |
| list.pop(index) | リストからindexの位置の要素を削除して、削除した要素を返す。 indexが指定されていない場合は最後の要素を削除して返す。 |
| list.clear() | リストからすべての要素を削除。 |
要素数の取得や検索
list = ['red', 'green', 'blue', 'red', 'blue']
print(len(list)) # 5
print(list.index('red')) # 0
print(list.count('red')) # 2
print('red' in list) # True
print('red' not in list) # False
| len(list) | リストの要素数を取得。 |
|---|---|
| list.index(x) | リスト内の最初のxのインデックスを返す。 リスト内にxがない場合はエラー。 |
| list.count(x) | リスト内にあるxの数を返す。 |
| x in list | xがリスト内にあるかどうかを調べる。 ある場合はTrue、ない場合はFalseを返す。 |
| x not in list | xがリスト内にないかどうかを調べる。 ない場合はTrue、ある場合はFalseを返す。 |
最小値・最大値・合計値を取得
list = [1, 2, 3] print(min(list)) # 1 print(max(list)) # 3 print(sum(list)) # 6
| min.(list) | リスト内の最小値を取得。 |
|---|---|
| max.(list) | リスト内の最大値を取得。 |
| sum.(list) | リスト内の合計値を取得。 |
並び順の変更
list = ['banana', 'apple', 'peach', 'orange'] list.sort() print(list) # ['apple', 'banana', 'orange', 'peach'] list.reverse() print(list) # ['peach', 'orange', 'banana', 'apple']
| list.sort(key=None, reverse=False) | リストの要素をソートする。 |
|---|---|
| list.reverse() | リストの要素を逆順にする。 |
コピー
リストのコピーは通常参照渡しになります。
list = ['A', 'B', 'C'] list2 = list list2[0] = 0 print(list) # [0, 'B', 'C'] print(list2) # [0, 'B', 'C']
copy()を使ってコピーすることで値渡しにできます。
list = ['A', 'B', 'C'] list2 = list.copy() list2[0] = 0 print(list) # ['A', 'B', 'C'] print(list2) # [0, 'B', 'C']
| list.copy(list) | リストのコピーを返す。 |
|---|
もしくはスライスで以下のようにすることでも可能です。
list = ['A', 'B', 'C'] list2 = list[:] list2[0] = 0 print(list) # ['A', 'B', 'C'] print(list2) # [0, 'B', 'C']
タプル型
タプルはリストとほぼ同じですが、値の変更ができない点が異なります。
タプルの使い方は全体を丸括弧() で囲って、値をカンマで区切ります。
tuple = (1, 2, 3, 4, 5)
print(tuple) # (1, 2, 3, 4, 5)
print(tuple[0]) # 1
print(tuple[-1]) # 5
# スライス
print(tuple[2:]) # (3, 4, 5)
print(tuple[::2]) # (1, 3, 5)
# 演算
tuple2 = ('A', 'B', 'C')
print(tuple + tuple2) # (1, 2, 3, 4, 5, 'A', 'B', 'C')
print(tuple2 * 2) # ('A', 'B', 'C', 'A', 'B', 'C')
# 要素数の取得・検索
print(len(tuple)) # 5
print(tuple.index(1)) # 0
print(tuple.count(1)) # 1
print(1 in tuple) # True
print(1 not in tuple) # False
# 最小値・最大値・合計
print(min(tuple)) # 1
print(max(tuple)) # 5
print(sum(tuple)) # 15
リストの項目で試したように、値や要素数の取得や演算、検索などを行うことができます。
ただし値の変更ができないので、以下のような追加や変更、削除、並び替えなどは行えません。
tuple = ('A', 'B', 'C', 'D', 'E')
# 追加・変更・削除
tuple[0] = 0 # TypeError: 'tuple' object does not support item assignment
tuple.append(6) # AttributeError: 'tuple' object has no attribute 'append'
tuple.extend([7, 8, 9]) # AttributeError: 'tuple' object has no attribute 'extend'
tuple.insert(0, -1) # AttributeError: 'tuple' object has no attribute 'insert'
tuple.remove('D') # AttributeError: 'tuple' object has no attribute 'remove'
pop = tuple.pop(4) # AttributeError: 'tuple' object has no attribute 'pop'
del tuple[0] # TypeError: 'tuple' object doesn't support item deletion
tuple.clear() # AttributeError: 'tuple' object has no attribute 'clear'
# 並び替え
tuple.sort() # AttributeError: 'tuple' object has no attribute 'sort'
tuple.reverse() # AttributeError: 'tuple' object has no attribute 'reverse'
※実際にはエラーが出た時点で処理が止まるので、上記のようにエラーが連続して出ることはありません。
値の変更はできませんが、再代入をすることはできます。
tuple = ('A', 'B', 'C')
print(tuple) # ('A', 'B', 'C')
print(id(tuple)) # 1729535287016
# 再代入
tuple = (1, 2, 3)
print(tuple) # (1, 2, 3)
print(id(tuple)) # 1729535287232
ただし、再代入した際はオブジェクトのIDは変更されます。
| id(object) | objectのIDを調べる。 |
|---|
リスト型をタプル型に、タプル型をリスト型に変換することもできます。
l = [1, 2, 3]
t = ('A', 'B', 'C')
print(tuple(l)) # (1, 2, 3)
print(list(t)) # ['A', 'B', 'C']
| tuple(list) | listをタプル型に変換する。 |
|---|---|
| list(tuple) | tupleをリスト型に変換する。 |
集合型
集合は要素の重複が不可なデータ型です。
前述のリスト型やタプル型と違い、各要素は順序付けられていません。
全体を中括弧{} で囲って、値をカンマで区切ります。
set = {'banana', 'banana', 'apple', 'peach', 'apple', 'orange', 'peach'}
print(set) # {'banana', 'apple', 'peach', 'orange'}
print(set[0]) # TypeError: 'set' object does not support indexing
同じ要素が複数ある場合は1つにまとめられ、インデックス番号で要素を取得することができません。
リストから集合を作成することもできます。
list = ['banana', 'banana', 'apple', 'peach', 'apple', 'orange', 'peach']
print(set(list)) # {'banana', 'peach', 'orange', 'apple'}
要素の追加や削除、変更は以下のようにします。
set = {'red', 'red', 'green', 'blue'}
print(set) # {'red', 'blue', 'green'}
set.add('yellow')
print(set) # {'yellow', 'red', 'blue', 'green'}
set.remove('blue')
print(set) # {'yellow', 'red', 'green'}
set.clear()
print(set) # set()
| set.add(x) | 集合にxを追加。 |
|---|---|
| set.remove(x) | 集合からxを削除。 |
| set.clear() | 集合からすべての要素を削除。 |
要素数の取得や検索
set = {'red', 'red', 'green', 'blue'}
print(set) # {'blue', 'red', 'green'}
print(len(set)) # 3
print('red' in set) # True
print('red' not in set) # False
リストでも試したlen()とin、not inが使えます。
index()とcount()は集合では使えません。
演算
set1 = {'red', 'green'}
set2 = {'red', 'black'}
print(set1 - set2) # {'green'}
print(set1 | set2) # {'red', 'green', 'black'}
print(set1 & set2) # {'red'}
print(set1 ^ set2) # {'green', 'black'}
| set1 – set2 | set1に含まれset2に含まれない要素で集合を作成。 |
|---|---|
| set1 | set2 | set1とset2の要素で集合を作成。 |
| set1 & set2 | set1とset2に共通する要素で集合を作成。 |
| set1 ^ set2 | set1とset2のどちらかにだけ含まれる要素で集合を作成。 |
辞書型
辞書はキーと値のペアで管理するデータ型です。
集合型と同じく、各要素は順序付けられていません。
全体を波括弧{} で囲って、キーと値を キー: 値 のようにして、各ペアをカンマで区切ります。
dictionary = {'name': 'suzuki', 'age': 18}
print(dictionary) # {'name': 'suzuki', 'age': 18}
print(dictionary[0]) # TypeError: 'set' object does not support indexing
インデックス番号で要素を取得しようとするとエラーになります。
値を取得や変更する場合、インデックス番号ではなくキーを指定します。
dictionary = {'name': 'suzuki', 'age': 18}
# 取得
print(dictionary['name']) # suzuki
# 変更
dictionary['age'] = 22
print(dictionary) # {'name': 'suzuki', 'age': 22}
# 追加
dictionary['gender'] = 'man'
print(dictionary) # {'name': 'suzuki', 'age': 22, 'gender': 'man'}
# 削除
del dictionary['age']
print(dictionary) # {'name': 'suzuki', 'gender': 'man'}
# 存在しないキーを削除しようとするとエラー
del dictionary['address']
print(dictionary) # KeyError: 'address'
要素数の取得や検索
dictionary = {'name': 'suzuki', 'age': 18}
print(len(dictionary)) # 2
print('name' in dictionary) # True
print('name' not in dictionary) # False
キーや値を全て取得
dictionary = {'name': 'suzuki', 'age': 18}
print(list(dictionary.keys())) # ['name', 'age']
print(list(dictionary.values())) # ['suzuki', 18]
print(list(dictionary.items())) # [('name', 'suzuki'), ('age', 18)]
| dictionary.keys() | dictionaryのキーをすべて取得。 |
|---|---|
| dictionary.values() | dictionaryの値をすべて取得。 |
| dictionary.items() | dictionaryのキーと値のペアをすべて取得。 |
【参考サイト】
- 3. An Informal Introduction to Python — Python 3.7.0 documentation
- 5. Data Structures — Python 3.7.0 documentation
コメントが承認されるまで時間がかかります。