60秒以内にPython3のリスト、タプル、集合、辞書型入門〈講座13〉
今回は複数のデータを扱うために Python が用意しているデータ型について説明いたします。
いくつか種類があるのですが、最初はリスト型とタプル、次が集合型、そして次が辞書型になります。
リスト型とタプルは順序付きのデータ型、集合型は順序なし、なおかつ重複を許さないデータ型、辞書型はキーと値でデータを管理していく型になるので見ていきましょう。
リスト型について
Pythonのリスト(List)は1つのリストに数値、文字列、リストなど様々な型の
データを格納することが出来ます。定数も変数も要素にすることが可能です。
list = [1, 2, 3.4, "a", l]
listには [1, 2, 3.4, "a", ['a', 'b', 'c']] が格納されます。
リストなのですが、[] の中に要素を , 区切りで並べていけば OK です。
例を見ていきましょう。
今回 price という変数を用意してあげて、100 円と 90 円といった具合にしてみましょう。
それぞれの要素へのアクセスなのですが、順序付きなので変数名の後に順番を付けてあげれば OK です。
順番なのですが、0 から始まる点に注意しておいてください。
prcie[0] とすると 100 が表示されます。
それから要素を書き換えるには同じようにしてあげればよくて、例えば要素の 0 番目を 95 点にしたい場合は price[0] = 95 としてあげてください。
それから要素の個数を調べるには len という命令が使えます。
print(len(price)) とすると 2 個と表示されます。
それから要素を末尾に追加するには append という命令を使ってあげてください。
例えば price.append(101) とすると、最後に 100 が追加されるはずです。
では print(price) で確認してみましょう。
他にもいろいろな命令があるのですが、自分で検索してください。
それから for と組み合わせる方法について説明いたします。
単に表示させたいなら、 for price in prices: としてあげて、 print(price) とすると、それぞれの要素を表示してくれるはずです。
もしくは、何番目の要素かも取り出したい場合には、enumerate という命令を使えば OK です。
for n(何番目か), price(内容) in enumerate(prices) とすると、何番目かも取り出してくれるので print で両方表示してみましょう。
次はタプルについて
タプルもリストと同じく、順序のあるデータを管理するためのものなのですが、値の変更ができないという点が異なっています。
では、今回 items という変数でタプルを作っていきます。
タプルは () の中に値を , 区切りで入れていけば OK です。
items = (50, "apple", 32.5)
リストでは同種のデータを扱うことが多いのですが、タプルでは違う種類のデータを含めることが多いですね。
例えば整数、文字列、浮動小数点数といった具合です。
ちなみに、リストでも違う種類のデータを含めることは可能です。
それぞれの要素へのアクセスですが、リストと同じように print(items[]) で [] の中に数字としていきます。
ただ値を書き換えることはできないので、これはエラーになります。
見てあげましょう…こうですね、タプルでは書き換えられません、と出ています。
それから、タプルとリストは相互に変換することができたりします。
タプルをリストにするには list() で囲ってあげれば OK です。
() の中に print(list((1, 3, 5))) のように書いていきましょう。
逆に、リストをタプルにするには tuple([]) としてあげて、[] の中にリストの要素を書いていけば OK ですね。
実行してみると…こうですね、上の方は [] でリストになっていて、下の方は () でタプルになっているのがわかるかと思います。
タプルは一度作ると変更ができないので、プログラム中で変わってほしくないデータを取り回すのによく使われます。
タプルを使用するメリットは、プログラムの実行速度が少し速いです。
内容が変わらないリストを用意したい場合はタプルも選択肢に入れることが出来ます。
次はスライスという機能について
これは部分的なリストを作るためのものですが、
例えば、今 prices というリストがあったとして、50 から 90 までのリストが欲しかったとしましょう。
prices = [40, 50, 70, 90, 60]
その場合は 0 番目から始めて 1 番目から 3 番目の要素が欲しいので、print(prices[1:4]) としてあげてください。
そうすると 1 番目から 4 番目を含まない位置まで、つまり 3 番目までを切り出してくれます。
ちなみに print(prices[:2]) とすると、最初から 0, 1 までの要素になるので、これは 40, 50 になるはずです。
それから逆に print(prices[3:]) とすると、3 番目の位置から最後までなので、結果としてこちらだと 90 と 60 が表示されるはずです。
それからスライスにマイナスの値も取ることができて、その場合は逆から数えて何番目か、になります。
少しわかりづらいのですが、例えば最後の 3 つだけ引っ張ってきたい場合は、末尾が -1 なので -2, -3 で、70 から最後までになります。
print(prices[-3:]) としてみれば OK ですね。
ちなみにこのスライスなのですが、リスト型だけではなくて文字列にも使うことができたりします。
例えば hello という文字列があって print(s[1:4]) とすると、1 番目から 3 番目なので ell が切り出されているのがわかるかと思います。
次はセットについて
リストやタプルは順序付きのデータを扱うものでしたが、セットは順番がなくて、そして重複を許さないデータ構造になります。
今回、単純に prices というセットを作ってみます。
prices = set([5, 4, 8, 5])
セットを作るにはprices = set([]) としてあげて [] の中に要素を入れていくか、もしくはもっとシンプルに prices = {} で要素を並べていけば OK です。
ここで、セットでは重複が許されないので、最後の 5 は無視されるはずです。
リストと違って順番を持たないので、何番目の要素といったアクセスの仕方ができません。
代わりに、その要素があるかないかは in という命令で調べることができます。
例えば print(5 in a) とすると、5 があるかないか調べてくれて、真偽値を返してくれます。
print(5 in a) # True
それから要素の追加や削除は add() や remove() を使えば OK です。
例えば 2 を追加したかったら a.add(2) のようにしてあげて、逆に 3 を削除したかったら a.remove(3) のようにすれば OK です。
要素の数ですが、リストなどと同じく len() を使えば OK です。
それから、セットは集合演算を行うこともできます。
例を出してa = {1, 3, 5, 8} で、 b = {3, 5, 8, 9} だったとしましょう。
合併を求めたい場合は print(a | b) としてあげてください。
複数のセットから重複要素を省いて1つのセットにする処理のことです。
3つ以上のセットを使用しても同様の処理が可能です。
交差・積集合の場合は( print(a & b) で) & です。
指定したセット両方(全て)に重複している要素を抽出します。
ユニオン同様3つ以上の要素からでも同様の処理が可能です
差集合の場合は( print(a - b) で) - を使えば OK です。
一方に存在し、もう一方に存在しない要素を抽出します。
同様3つ以上の要素からでも処理が可能です。
セットは値の重複の判定や結合の処理を行う際に便利です
次はキーと値でデータを管理していく辞書型について
郵便番号は、典型的な辞書型(ディクショナリ)データです。
キー:107-0052 バリュー:東京都港区赤坂
キー:160-0021 バリュー:東京都新宿区歌舞伎町
例を見ていきたいのですが、日足OHLCV というデータを作って、
OHLCVとは
・open(始値)
・high(高値)
・low(安値)
・close(終値)
・volume(出来高)
ここで、それぞれの要素にアクセスするには、キーを指定してあげれば OK です。
もしくは値を書き換えたい場合は、 OHLCV["open"] = 300 とすると、200 ではなくて 300 に書き換えることができます。
また、要素を追加するには単に新しいキーで値を追加すれば OK です。
OHLCV["name"] = "BTC" としてあげます。
それから、要素の削除には del() が使えます。
del() とした後に キーを指定してあげます。
それから辞書型に対してループを行う場合なのですが、items() という命令を使ってあげるとキーと値を同時に取り出すことができます。
for とした後に key, value としてあげて、 in sales.items(): としてあげます。
そうすると、キーと値が、key と value に入ってくるので、それを文字列の中で表示してあげましょう。
print("{0}: {1}".format(key, value)) としてあげます。
このあたりの処理にも慣れておくようにしてください。
今回は以上です
よろしくお願いいたします。
この記事が気に入ったらサポートをしてみませんか?