【Python】コレクションの応用

コレクションの相互変換

コレクションは異なるコレクションに変換することが出来ます。
変換はリストに変換するlist(),タプルに変換するtuple(),セットに変換するset(),ディクショナリに変換するdict()があります。
特に注意が必要なディクショナリとリストの相互変換について学びます

ディクショナリからリストへの変換

リストは値の保持、ディクショナリは値とキーを保持しています。一つの要素のデータ数が異なりますのでどのように変換されるのでしょうか?
サンプルを見て下さい。

3行目でディクショナリをリストに変換し表示しています。
普通にリスト変換するとキーがリストに変換されていることが解ります。
では値をリストにするにはどうするのでしょう。
4行目が答えです。list(tensu.values())とすることで明示的に値をリスト変換することを指示しています。

リストからディクショナリへの変換

先ほどの ディクショナリからリストへの変換の逆になります。
一つの要素数が増える方向になりますので二つのリストを合成します。
サンプルを見て下さい。

1行目で名前の2行目で値のリストを作成しています。
二つのリストをzip(name,atai)でまとめdictでディクショナリ変換しています。

入れ子構造

コレクション内にさらにコレクションを持つことが出来ます。これを入れ子構造、またはネストと呼びます。
入れ子構造はディクショナリでキーに複数の値を持たせたい場合などに役立ちます。
サンプルをご覧下さい。

サンプルは各自動車メーカーのスポーツモデルとその価格(万円)を表示させるプログラムです。
最初に各社ごとのデータをセットし、それらを一つディクショナリにまとめ最後にホンダのデータを表示しています。
このようにディクショナリのデータを入れ子にすることで、各要素のデータ数が異なっても管理出来ます。

多次元配列

エクセルのようなデータの格納方法です。
エクセルは列と行で管理していますが、このようなデータ構造は多次元配列で管理します。
例えば3列2行は1ですね。
これをプログラムでアクセスしてみましょう

10 12 33 100
23 45 1 88
77 73 12 66

サンプルプログラムをご覧下さい。
最初に各行のデータをリスト化しています。
4行目でそのリストをさらにリスト化しています。
2次元配列は[][]このようにアクセスします。
最初の[]が行、次の[]が列のインデックスが入ります。
2行3列なので1と2がインデックスになります。
インデックスは先頭を0で数えますので1少ない数になるのでしたよね。
忘れていたらリストの項を確認して下さい。

集合演算

タプルには集合演算機能があります。
集合演算とは昔数学でならった和、差、積、排他的論理和 です。

サンプルプログラムを見て下さい。
集合結果を表示しています。
詳細はコメントの説明をご覧下さい

結果は二つの集合に存在するすべての値になります。
記号は|です。

結果は片方の集合からもう一方にも含まれる値を除いた値になります。
記号は-です。

排他的論理和

結果は積集合以外の値です。
記号は^です。

 

今回はここまで。

お疲れ様でした。

python教室「総合目次」に戻る

 

 

 

Python教室

Posted by taka