LoginSignup
1
0

More than 3 years have passed since last update.

Python はじめから勉強 Hour6:よく使うデータ型:タプル型・セット型・辞書型

Posted at

Python はじめから勉強 Hour6:よく使うデータ型:タプル型・セット型・辞書型

  • Pythonで何かしようとしたときに、まずサンプルスクリプトを探してなんとなく実行してた私が、
  • 自動実行でREST API叩いて、結果の確認、VM操作までやってみたいと思う7時間
  • よく使うデータ型についての理解。「タプル型」「セット型」「辞書型」をやります

学習資料

過去の投稿

環境

  • Windows
  • Python Ver3系

タプル型

  • タプルは複数のデータをまとめて管理するための型です。そういう意味ではリストと似ています。
  • リストは一般的に「同種類のデータ」を任意の数で格納することに用いられます。
  • タプルは複数の異なる種類のデータをまとめる目的で使われます。

  • 例えば生徒の「名前」「身長」「体重」の組み合わせを管理したいとき。その中で平均身長を求めるとき。これをリストで表すと下記のようになります。

taro = ['taro', 170, 80]
jiro = ['jiro', 180, 85]
saburo = ['saburo', 172, 81]
class_list = [taro, jiro, saburo]

sum_height=0

for person in class_list:
    sum_height += person[1]

print(sum_height/len(class_list))
  • 実行結果
174.0
  • 結果は出ましたが、リストは本来「同種のデータを任意の数で格納する」目的のため本来の使い方と異なる(ようです)
  • こういったカチットしたデータ構造を扱うにはタプルを使いましょう
  • 先ほどのスクリプトをタプルを使ってみましょう。※最初の3行だけ異なることに注意
taro = ('taro', 170, 80)
jiro =('jiro', 180, 85)
saburo = ('saburo', 172, 81)
class_list = [taro, jiro, saburo]

sum_height=0

for person in class_list:
    sum_height += person[1]

print(sum_height/len(class_list))
  • 実行結果
174.0
  • 結果は当然同じです。
  • タプルは宣言や要素の参照の仕方と言う点でリストと似ていますが、実体はかなり違います。
  • リストは要素の追加や削除、変更が可能ですが、タプルは一度作った後は参照しかできない不変オブジェクトとなります。

    • タプルの使い方をもう少し見てみます
    • リストのように扱えるが、変更や削除ができないことが分かると思います。
>>> taro = ('taro', 180, 80)    # ()を使ってタプル型を宣言します。
>>> type(taro)                 # tuple型であることを確認
<class 'tuple'>
>>> print(taro[1])             #リストと同じように参照できます。
180

>>> taro[0] = 'jiro'            # tuple型は値の変更ができない
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>>
>>> del taro[1]                 # tuple型は値の削除もできない
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object doesn't support item deletion

タプル型の扱い方・関数

アンパック代入

  • タプルでよく使われるテクニックとして「タプル型 = タプル型」という表記で右側のタプルの中身を個別に取り出す「アンパック代入」という方法があります。タプルの要素を分かりやすい変数名にする目的です
>>> (name, height, weight) = ('taro', 180, 80)
>>> print(name)                 # データが扱いやすくなりました
taro
>>> print(weight)
80
>>>

enumerate()関数

  • 引数に指定したリストを「インデックス蛮行」と「要素」がタプルになって入ってきます。
>>> my_list = ['a', 'b', 'c', 'd']
>>> enum_obj = enumerate(my_list)
>>> print(enum_obj)
>>> print(list(enum_obj))
[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd')]

  • enumerate関数を使うとリストをインデックス番号付きでループさせることが簡単にできます。
  • (いまいち何に使うか分からん)

  • 例えばこんな使い方

list1 = ['a', 'b', 'c']
for (index, item) in enumerate(list1):
    print('{}:{}'.format(index, item))
  • 実行結果
0:a
1:b
2:c
  • わざわざインデックス用の変数を宣言したり、ループを回るごとに1加算させたりする必要がなくなります。

セット型

  • セットは順序と重複のないデータ構造です。数学の「集合」のイメージですね。
  • なんとなく概念↓
セット データ
くだもの りんご
ばなな
いちご
  • 例えば上記のような集合があった場合に、「ぐれーぷ」というデータは追加できますが「りんご」というデータは重複しているために追加されません。
  • セットは検索が非常に高速らしい
  • 使い方確認
>>> my_set = set()
>>>
>>> my_set.add('apple')     # appleを追加
>>> print(my_set)
{'apple'}
>>>
>>> my_set.add('banana')    # bananaを追加
>>> print(my_set)
{'banana', 'apple'}
>>>
>>> my_set.add('apple')     # appleを追加する。追加されない、エラーにもならない
>>> print(my_set)
{'banana', 'apple'}
>>>

辞書型

  • 辞書型はセット型の発展系です。
  • キーと値を持っています。
  • こんなイメージ↓
セット データ
くだもの りんご:あか
ばなな:きいろ
いちご:あか
  • セットと同じ感じですが各キーには値を持っています
  • 使い方確認
>>> fruits_dict = dict()
>>> fruits_dict['apple'] = 'red'        # キーと値を入れる
>>>
>>> fruits_dict['banana'] = 'yellow'
>>> fruits_dict
{'apple': 'red', 'banana': 'yellow'}
>>> fruits_dict['apple']                # キーから値を取り出す
'red'
>>>

今回のまとめ

  • よく使うデータ型を確認しました。

  • 辞書型が扱えるとJSON形式を取り込んだり、吐き出したりできそうです

名言・ライトニングトーク用

  • 使い方は分かってきたけど、何かを作るには程遠いような。。。。。。
  • Qiita炎上中。。。。。
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0