コレクション
- 多くの要素を持つデータ型。複数の値をまとめる時に使われる。
- 2種類ある。
- シーケンス型: 要素に順番があり、順序でアクセス可能
- 順番の変更が可能なものとそうでないものがある
- マッピング型: 順番に意味なし
- シーケンス型: 要素に順番があり、順序でアクセス可能
順番あり | 順番なし | |
---|---|---|
変更可能 | リスト | 辞書、集合(Set) |
変更不可能 | タプル、文字列 | 集合(Frozen Set) |
リスト
変更可能なシーケンス型。角括弧[]
で囲んで記述する。異なる方の要素を含むことができる。
>>> squares = [1, 4, 9, 16, 25, 36]
インデックスを指定して特定の値を取り出すこともできる。
値 | 1 | 4 | 9 | 16 | 25 | 36 |
---|---|---|---|---|---|---|
インデックス | 0 | 1 | 2 | 3 | 4 | 5 |
インデックス(-) | -6 | -5 | -4 | -3 | -2 | -1 |
>>> squares = [1, 4, 9, 16, 25, 36]
>>> squares[2]
9
>>> squares[-4]
9
スライス
([始点:終点-1])を使うと、一定範囲の値を取り出すことができる。
>>> squares[2:5] # 3〜5番目の値を出力
[9, 16, 25]
>>> squares[-3:] # 後ろから3番目〜最後までの値を出力
[16, 25, 36]
値の位置を指定して値を変更することもできる。
>>> squares[4] = 30
>>> squares[-5] = 7
>>> squares
[1, 7, 9, 16, 30, 36]
スライスで値を変更することもできる。
>>> squares[2:5] = [10,20,35]
>>> squares
[1, 7, 10, 20, 35, 36]
リストには文字列なども入れられる。できることは数値と同じ。
インプレース演算
リストの値を変える演算をインプレース演算
という。
.sort()メソッド
リスト内の値を並び替える。sorted()関数と似ているが、リストの中身が書き換えられるかどうかが異なる。
>>> list_a = [1, 4, 3, 5, 2]
>>> sorted(list_a) # 値の並べ替え
[1, 2, 3, 4, 5]
>>> list_a # リストの中身は書き換えられない
[1, 4, 3, 5, 2]
>>> list_a = sorted(list_a) # リストの中身を書き換えたい場合はこの形で
>>> list_a
[1, 2, 3, 4, 5]
.sort()メソッドを使うと
>>> list_a = [1, 4, 3, 5, 2]
>>> list_a.sort()
>>> list_a
[1, 2, 3, 4, 5]
リストの主なメソッド
メソッド | 操作内容 |
---|---|
list.append(x) | リストの末尾に要素を1つ追加する |
list.extend(iterable) | あるイテレータのすべての要素を末尾に追加する |
list.insert(i, x) | インデックスiで指定した位置に要素xを追加する |
list.remove(x) | リストの中にxと等しい値がある場合、その最初の要素を削除する。等しい値がない場合はValueError |
list.pop() | リストの末尾を削除し、その要素を返す。括弧にインデックスを指定すると、特定の要素を削除し、その要素を返す。 |
list.clear() | リストの全要素を削除する |
list.index(x) | リストの中にxと等しい値がある場合、その要素のインデックスを返す。等しい値がない場合はValueError |
list.count(x) | リストの中にあるxの数を返す |
list.reverse() | リストの要素を逆順にする |
del文
リストの要素を削除する方法は.remove()や.pop()だけではない。del文
でも削除可能。
>>> list = [1, 2, 3, 4, 5]
>>> del list[2] # インデックスを指定して特定の要素を削除する
>>> list
[1, 2, 4, 5]
>>> del list[1:3] # スライスを使って一定範囲の要素を削除する
>>> list
[1, 5]
タプル
変更不可能なシーケンス型。括弧
で囲んで記述する。
>>> numbers = (1, 2, 3, 4, 5, 6)
インデックス、スライスでできることはリストと同じ。
リストとタプル、どう使い分けるのか
値を変更したくない場合はタプル。
- アプリケーション内の設定値
- CSVのレコードデータの保持
- トランプのカード表現('Spade', '1')
など
辞書
キー(key)と値(value)の組み合わせで管理する、順番を持たない(インデックスは使えない)型。この2つを波括弧
で囲んで記述する。
キーを指定すると値を取り出すことができる。また、キーを指定して値を変更することもできる。
>>> dacho = {'higo':'leader', 'jimon':'muscle', 'ueshima':'kiss'}
>>> dacho['ueshima']
'kiss'
>>> dacho['ueshima'] = 'kururimpa'
>>> dacho['ueshima']
'kururimpa'
値だけが欲しい場合は.values()メソッド
を、キーと値をセットで欲しい場合は.items()メソッド
を使う。
>>> dacho = {'higo':'leader', 'jimon':'muscle', 'ueshima':'kiss'}
>>> for d in dacho.values():
... print(d)
...
leader
muscle
kiss
>>> for d in dacho.items():
... print(d)
...
('higo', 'leader')
('jimon', 'muscle')
('ueshima', 'kiss')
集合(Set)
複合する要素を持たない、順番も持たない(インデックスは使えない)型。波括弧
で囲んで記述する。要素が重複している場合は1つにまとめられる。可変。
>>> hollywood = {'h', 'o', 'l', 'l', 'y', 'w', 'o', 'o', 'd'}
>>> hollywood
{'o', 'w', 'h', 'y', 'd', 'l'}
集合(Frozen Set)
複合する要素を持たない、順番も持たない(インデックスは使えない)型。波括弧
で囲んで記述する。要素が重複している場合は1つにまとめられる。不変。
集合を用いた集合演算
>>> a = {1, 2, 3}
>>> b = {2, 3, 4}
>>> a | b # 和(aかbに含まれる)
{1, 2, 3, 4}
>>> a.union(b)
{1, 2, 3, 4}
>>> a & b # 積(aとbに共通)
{2, 3}
>>> a.intersection(b)
{2, 3}
>>> a - b # 差(aにのみ含まれる)
{1}
>>> a.difference(b)
{1}
>>> a ^ b # 対称差(aもしくはbにのみ含まれる)
{1, 4}
>>> a.symmetric_difference(b)
{1, 4}
メソッドの後ろに_update
を付けると、演算の結果を変数に代入できる。
文字列の扱い
文字列は要素を持つ変更不可能なイテレータとして扱われる。スライスを使って一定範囲を取り出すことも可能。
>>> str = 'abcdefg'
>>> str[2:5]
'cde'