0から始めるPython基礎講座

【Python入門】変数のデータ型・コレクション型について

りっくん

こんにちは。りっくんです。

前回、変数について解説しましたね。
簡単なまとめですが、変数とは「名前がついている入れ物」でしたね。

そんな変数ですが、前回のように数字だけしか入れられないことはなく
様々なものを変数にしまい、値を設定することができるんです!(これを代入と言います。)

早速どのようなものが変数に代入することができるのか解説していきます!

プログラミング学習はスクール通いもおすすめです!

皆さんは今、独学でプログラミングを学んでいらっしゃるかと思います。

でも考えてみてください、学習しているといっても「業務に還元できる」内容でないと案件も獲得できないですよね?

そこでおすすめなのかこちら「Winスクール」さんです。

こちらでは受講生一人ひとりのスキルや理解度に応じた指導を行い、業務に即した実践的な学習を個人レッスンで受けられるんです!
しかもただレクチャーするだけでなく、資格取得にも強いみたいなので
興味のある方はぜひ無料体験・カウンセリングに足を運んでみましょう!!

【必読】データ型の一覧

りっくん

非常に大切なところなのでしっかり確認しよう!!

データ型(読み方)解説・扱える値
str(ストリング)扱える値:文字列(例:’Hello World’, “TEST”など)
「” “」、「’ ‘」で囲って定義をする。
int(イント)扱える値:整数(プラス・マイナス)
整数値で、プログラムを動かすメモリの容量があれば、
どんな大きさの値でも代入して使用できる。(最大値・最小値の制限なし)
※小数は使用不可。
float(フロート)扱える値:小数点が含まれる数値(プログラム界では「浮動小数点」と言う)
小数点を含んだ値を代入できる。intとは異なり扱える最大値・最小値が
定められている。
<扱える範囲>
-1.7976931348623157e+308 〜 1.7976931348623157e+308
⇨簡潔にいうと、一般利用では問題なく小数点を扱えるデータ型だと
思ってください。
bool(ブール)扱える値:True/False(プログラム界では「真偽値」と言う。)
値を見て分かる通り、
「正しいものか(True)、誤っているものか(False)の判定値として
使用されるデータ型。
datetime(データタイム)扱える値:日付(デフォルトだとミリ秒まで)

Pythonの基本機能として使用されるデータ型はこの4つだけになっております。
他のプログラミング言語だともう少し種類あるのですが、Pythonは非常にシンプルにまとまっています。

まとまった値を扱える「コレクション型」

コレクション、、何かを「集める」???

プログラミングをしていく中でほぼ必ず使用するであろう「コレクション型」について解説していきます。

コレクションとは?

前回の記事・そして前の章で「変数」について解説いたしました。
説明するときの例として単独の値(数値、文字列、真偽値)を変数に格納しました。

では以下のようにプログラムを組みたいとなったとき、どのように書きますでしょうか?

Exercice

あなたが今思いつく果物の名前を立て続けに変数内に代入して定義してください。

変数を学んだばかりの方はおそらくこのように書くかと思います。

#果物の名前一覧
apple = 'りんご'
banana = 'バナナ'
orange = 'みかん'
grape = 'ぶどう'
peach = 'もも'
pear = ''
....他たくさん

上記のように書いても一応、プログラミングでエラーになることはないでしょう。
でも書いてみて分かると思いますけど、変数の定義だけで何十〜何百行を費やしてしまいます。
何十〜何百行、変数定義をすることにより

  • そもそもプログラミングコード(コードと略します)が見にくい。保守性に欠ける。
  • 使用するメモリが多くなり、プログラムのパフォーマンスが低くなる

などデメリットが多数出てくるわけです。

それよりも、後述する(別の記事でも詳しく書きますが)コレクションを使用すれば

#コレクションの一覧。他にもいろいろあるよ。
fruit_list = ['りんご', 'バナナ', 'みかん', 'ぶどう', 'もも', '']

fruit_dict = {
  'apple' : 'りんご',
  'banana' : 'バナナ',
  'orange' : 'りんご',
  'grape' : 'ぶどう',
  'peach' : 'もも',
  'pear' : ''
}

              コレクションの利用例

このように1行でまとめられたり、キーワードと値を紐付けて一括りにすることだってできるわけです。

コレクションのデータ型一覧

データ型(読み方)解説・扱える値
list(リスト)「配列」とも言われます。
・複数要素(文字列、数値、真偽値など)を一括りにできる
・[]を使用して定義し、各値(要素)間はカンマ(” , “)で区切る
・一度格納した要素は変更することができる。
tuple(タプル)・複数要素(文字列、数値、真偽値など)を一括りにできる
・()を使用して定義し、各値(要素)間はカンマ(” , “)で区切る
・一度格納した要素は変更することができない
dictionary(ディクショナリー)「辞書型」とも言われます。
・複数要素(文字列、数値、真偽値など)を一括りにできる
・{}を使用して定義し、各要素はキーと値を使用し間には
コロン(” : “)で区切る
・キーを元に値の参照が可能。
・一度格納した要素は変更することができる。

list(リスト)について

list(リスト)の定義

配列とも呼ばれるリストでは下記のように定義して使用します。

a = [1, 'a', True]

定義する際、リストでは大括弧[]を使い、それぞれの値の間にはカンマを使用する決まりがあります。

また、それぞれの値のことをコレクション型では「要素」と呼び、0から始まってそれぞれの値にラベリングをするといった特徴があります。

図で表すとこのようなイメージとなります。箱の中にそれぞれデータを入れる感じですね。

                  リストのイメージ図

list -要素の取り出し(スライス)

スライスはリスト内の要素の開始位置と終了位置を指定し、その間にある要素を取得するものです。

#テスト用のリストの作成
a = [1, 2, 3, 4]
#上で作成したリストをスライス
b = a[1:3]
print(b)

c = a[1:-1]
print(c)

#---------------bの出力結果-------------------
#[2, 3]
#---------------bの出力結果-------------------
#[2, 3]

変数名「c」では終了位置に「-1」を指定しております。これでも問題なく値を取得できます。

マイナスをつけることにより、最後の要素から指定することができます。

                スライスのイメージ図

またスライスでは開始位置、終了位置を省略することができます。

a = [1, 2, 3, 4]
b = [1:]
c = [:1]
print(b)
print(c)

#-----------出力結果-------------
[2, 3 ,4]
[1]

list -要素の追加(append[アペンド])

リストに要素を追加するためには「append()」を使用します。

a = [1, 2, 3, 4]
b = a.append(7)
print(b)

#-------------出力結果-------------
[1, 2, 3, 4, 7]

また、リストの追加は数値や文字列など単純な値だけでなく、リストも追加することが可能です。
⇨1要素としてカウントされるため、結合することはできません。

a = [1, 2, 3, 4]
b = a.append([1, 2, 3])
print(b)

#---------------出力結果-------------
[1, 2, 3, 4, [1, 2, 3]]

ここでの注意点として、append()で実現できる要素の追加は
「リストの末尾に追加する」動きを示します。

list -リスト・タプルを結合する(extend[エクステンド])

先ほどのappend()ではリストを引数(カッコ内に入れる値のこと。パラメータとも言います)
に指定して実行すると、1要素としてまとめて格納されてしまいました。

extend()ではリストを引数に指定したら結合することが可能となります。

a = [1, 2, 3, 4]
b = a.extend([1, 2, 3])
print(b)

#---------------出力結果-------------
[1, 2, 3, 4, 1, 2, 3]

           append()とは出力結果が異なりますよね?

また、extend()ではコレクション一覧にも出ていた「タプル」を使うこともできます。

a = [1, 2, 3, 4]
b = a.extend((1, 2, 3))
print(b)

#---------------出力結果-------------
[1, 2, 3, 4, 1, 2, 3]

           タプルでは小カッコ()を使うんですよね。

list -特定位置に要素を追加する(insert())

append(), extend()双方では要素の追加は可能ですが、いずれも要素の末尾に追加する形でした。

insert()では第一引数に指定する要素、第二引数に挿入する値を入力します。
スライス同様、先頭は0、負の値は末尾から数える形で指定します。(-1など)

l = ['a', 'b', 'c']

l.insert(1, 100)
print(l)
# ['a', 100, 'b', 'c']

l.insert(0, 200)
print(l)
# [200, 'a', 100, 'b', 'c']

l.insert(-1, 300)
print(l)
# [200, 'a', 100, 'b', 300, 'c']

l.insert(-2, 400)
print(l)
# [200, 'a', 100, 'b', 400, 300, 'c']

insert()の第二引数にリストを指定すると、append()同様に1つの要素としてカウントされてしまい、まとめて挿入されてしまいます。

l.insert(0, [-1, -2, -3])
print(l)
# [[-1, -2, -3], 200, 'a', 100, 'b', 400, 300, 'c']

list -要素を削除する:del()、pop()、remove()

リストの要素を削除するメソッドは3種類存在します。

■del():インデックスを指定して削除します。

a = [1, 3, 4]
del a[0]
print(a)
#---------出力結果----------
#[2, 4]

■pop():インデックスを指定しその値を一度取り出す。その後削除する。
※インデックスを指定しないと、末尾の値を取り出します。

# インデックスを指定する方法
a = [1, 2, 3]
b = a.pop(0)
print(a)
# [2, 3]
print(b)
# 1

# インデックスを指定しない方法
a = [1, 2, 3]
b = a.pop()
print(a)
# [1, 2]
print(b)
# 3

■remove():値を指定して削除します。

a = [1, 2, 4]
a.remove(4)
print(a)
# [1, 2]

list(リスト)の初期化

リスト自体を初期化するためにはclear()を使用します。→空のリスト([])になります

a = [1, 2, 4]
a.clear()
print(a)

# []

tuple(タプル)について

タプルは、リストや辞書型とは異なり「後から値を変更することができない」と言うのが大きな特徴となります。

これだけ聞くと

わざわざ変更できないコレクションって使う機会あるの?

と思うでしょう。
概ねその通りで基本的にはリストや辞書型を使うことが多いですが、例えば下記のようなシチュエーションでタプルを使用することがあります。

  • ・画像の形式設定など、変更されると表示時に影響を及ぼすもの
  • ・定数化したい(他のプログラム・処理でリスト内の値を変更されたくない)

など使用状況が出てくることがあります。

また、外部ライブラリを使用する際

「引数にはタプルを指定して入力する」

といった条件が定められたりするため、時と場合に応じて使用しましょう。

dictionary(辞書型について)

コレクション一覧にまとめた通り、辞書型ではキーワード(キーと呼びます)と値を結びつけることができるものになります。

dict型の定義

# dictionary型の定義
dict_test = {
  'key1' : 'value1',
  'key2' : 'value2'
}

辞書型(以下、dict型と表記します)の定義として、中カッコ({})で囲う必要があります。
中身のキーと値の間は「コロン(:)」を使って分けてあげます。

dict型 -要素の取得

指定したキーの値を返すためには「get」を使用します。

# 値の取得
dict_test = {
  'key1' : 'value1',
  'key2' : 'value2'
}

val = dict_test.get('key1')
# value1
val_add2ndparam = dict_test.get('key3', 'そんなのありません')
# そんなのありません

<引数>
・第1引数:取得したい値に紐づく「キー」
・第2引数(任意):第1引数で指定したキーが存在しなかったときに返す値。

dict型 -要素を削除する:del、pop()、popitem()

■del -指定したキーを削除する

  • ・指定したキーが存在しない場合はエラーが発生する。(KeyError)
  • ・削除以外の処理を行わないため、性能が最も良い。
# 値の削除
dict_test = {
  'key1' : 'value1',
  'key2' : 'value2'
}

del dict_test['key1']

■pop() -指定したキーを削除し、値を返す。

  • ・要素の削除 + 削除された値の取得を行いたい

上記のようなシチュエーションではpop()を使用します。

dict_test = {
  'key1' : 'value1',
  'key2' : 'value2'
}

#キーが存在しない場合、エラーを返す。
val = dict_test.pop('key1')
#キーが存在しない場合、第2引数の値を返す。(ここではNone)
val = dict_test.pop('key1', None)

<引数>
・第1引数:取得したい値に紐づく「キー」
・第2引数(任意):第1引数で指定したキーが存在しなかったときに返す値。

■popitem() -要素を1つ削除し、キーと値をtuple形式で返す。

<バージョンによって動きが異なります>
・Python 3.7未満:無作為に要素を選ばれ削除される
・Python 3.7以上:最後の要素から順に削除される。(安心)

dic = {
  "a" :  0
}

key_value = dic.popitem()
# ('a', 0)

まとめ

お疲れ様でした!

データ型・コレクション型のおおよその理解はできましたでしょうか?
今回ご紹介したメソッドは一部であり、まだまだ他にもあるため興味のある方は調べてみましょう。

データを扱う第一歩となるため、しっかり理解しておきましょう!

この章でのまとめ

・変数を扱うにはいくつか「データ型」と言うものがあり、代入する値によって型が変わってくる。

・値をたくさんを扱う際は、「コレクション型」を使ってデータを格納していく
⇨タプル型は「定数」を扱うときに活用するべし!