見出し画像

【Python】配列(タプル型、リスト型…)などでまとめてみよう

このNoteは以下の人に向けた記事となっています。
 ☑Pythonの変数を勉強したけど、まだ配列を勉強していない方
 ☑変数をグループ化のやり方がわからなくて困っていたという方
 ☑配列は勉強したけど、タプル型とリスト型の違いがわからない。

たとえば、こんな書き方があったとき、

foods='apple'
foods1='pineapple'
foods2='grape'

1,2,3,...

とつけなければいけないとき、大変な思いをしたことはなかったでしょうか?

foods=['apple','pineapple','grape']

の書き方を覚えれば、

「グループで固められる」

ようになり、楽になります。

また、

food_num=0;
food_name='apple'

とするよりも、

food={
   'name':'apple',
   'num':0,
}

としたほうがわかりやすくないでしょうか。

foods=['apple','pineapple','grape']

のようなものを「リスト」

food={
   'name':'apple',
   'num':0,
}

のようなものを「辞書」といいます。

それでは解説していきます。

配列編

Pythonは配列のことをリスト!?

リスト型の図解
リスト型は袋に変数が順番に入っている型のことを指す。

Pythonでは配列のことを

「リスト型」

といいます。

リスト型はいくつかの変数を

「順にまとめたもの」

をいいます。

名前のつけ方は

foods

のように

「単語+複数形(s)」

を用いるとわかりやすいでしょう。

じゃぁ、どうやってリストの中身を取り出せばいいの?

という疑問が出てくるかもしれません。

そもそもリストは

「いくつかの変数をまとめたもの」

です。

いくつかの「変数」の連番を

「要素」

と呼びます。それでは、リストの中身の取り出し方を説明します。

取り出し方は

<リスト名>[0から始まる要素の番号]

でOKです。

これではわかりにくいので、例をあげて説明してみます。

たとえば、

fruits=['apple','grape','orange']

のようなfruitsのリストから

「apple」

を取り出したいとしましょう。

取り出すには

fruits[0]

と書いてあげればOKです。

また、

print(fruits[0])

と書けば、画面に出力してくれます。

リストの要素は書きかえることができて、

fruits=['apple','grape','orange']
fruits[0]='banana'
print(fruits[0])

とした場合、

実行結果(google colaboratory)

のように

「banana」

と出力されます。

また、リストへも

「要素の追加」をする

こともできます。

たとえば、

fruits=['apple','grape']

のリストがあるとします。

fruits.append('banana')

のようにappendを使うと、

Python:appendで追加の実行結果

のように

['apple','orange','banana']

で要素が追加されていることがわかります。

タプル型はリスト型と違って一度決めたら変更できない

タプル型の説明。
リスト型と混同しがちだが、タプル型は一度設定したら変更できないとおぼえておけばよいだろう🤔

リスト型とよく似た型に、タプル型というものがありますが、リスト型とは違い、変更ができません。なので、

ユーザーに変更してほしくない、少しでも早くループを回したい…

といったときに最適な型となるでしょう。

ちなみに、タプル型の書き方は、ほぼリスト型と書き方は同じで、

(1,2,…)※ただし、要素が一つだけの場合は(1,)と書く!!

のようにカッコでくくることで、Pythonでは**タプル型(Tuple)**として認識してくれます。ですが、一度変数に入れてしまうと、タプル型のままでは変更することはできません。

tpl_a=(2,3)
print(tpl_a) #(2,3)と表示される。tuple型はprint関数では()でくくって表示される。

ちなみに、タプル型の要素のアクセス方法ですが、タプル型でもリスト型と同じく、

(変数の名前)[(要素の番号)]

と書けばOKです。なので、上のコードの変数tpl_aから0番目を取り出したい場合は、

tpl_a[0]#リスト型と書き方は同じです。

Pythonには、変数を定数化(const)させることはできないイメージをもたれがちですが、配列なら、

「タプル型」

と呼ばれる変数があることを覚えておくと良いでしょう😊

じゃぁ、具体的にタプル型とリスト型どうやって使い分けたらええのん?

タプル型とリスト型の違い

さきほど解説したリスト型とは違い、一度設定してしまうと、自由に変更ができず、タプル型は扱いにくいイメージがあるかもしれませんが、

リスト型→変更できる(ミュータブル)

タプル型→変更できない(イミュータブル)

と考えればよいでしょう。

また、

リスト型とタプル型は相互に行き来(型変換)

ができますので、

一度リスト型で配列の追加を行い、あとで、タプル型に変更する

といったこともできます!!

ちなみに、タプル型からリスト型の変更するには、list関数

tpl_a=list(tpl_a)

ちなみに、リスト型からタプル型に変更するには、tuple関数

tpl_a=tuple(a)

使うと、型の変換ができるようになります。

【ちょっと深堀り】本当にタプル型って速いのん?

そもそも、

タプル型の配列を取り出す場合と、リスト型の配列を取り出す場合の処理の速さは異なります

と言っても、そのままでは信じてもらえないので、本当に速いか検証してみましょう。

リスト型の変数でループした場合の時間

タプル型の変数でループした場合の時間

をそれぞれ測ることにより、

本当にタプル型のほうが早くループを回せるのか

を検証していきたいと思います。それでは、コードを書いていきましょう!!

import time
a=[1,2,3,4,7,8,9,0]
tpl_a=(1,2,3,4,7,8,9,0)
begin=time.perf_counter()#time.perf_counter関数で時間の差を求めることで、処理速度を図っていきます。単位は秒。
time.sleep(0.001)#小数点で表示されやすいように少しの間スリープさせる。
for content in tpl_a:
	print(content)
end=time.perf_counter()
print("タプル型の時間:",end-begin,"秒")
begin=time.perf_counter()
time.sleep(0.001)
for content in a:
	print(content)
end=time.perf_counter()
print("リスト型の時間:",end-begin,"秒")

コードの解説ですが、簡単に説明しますと、

  1. 処理が始まった・終わった時間をperf_counter関数で実際にかかった時間取得。

  2. タプル型とリスト型の時間をprint関数で表示

して、わかりやすくしました。すると、実行結果は…🤔

1
2
3
4
7
8
9
0
タプル型の時間: 0.001441913999999933 秒
1
2
3
4
7
8
9
0
リスト型の時間: 0.002753240000000101

となりました。検証の予想通り、

タプル型のほうが処理速度が速い

ということがわかりました!!

ループ構文について、知りたい方は、以下のNoteを見てみてくださいね〜😉

タプル型が速い理由をもっと詳しく知りたい方はclassmethodさんの記事が詳しいので、Pythonもっと極めたい方はぜひ読んでみてください☺️⬇

少し話からそれちゃいますが、Pythonにおける処理速度を早くするものとして、

  • Pythonのライブラリの選び方

  • 完成したらできるだけタプル型で回す

によって処理速度が変わることを知り、

Pythonってほんまに奥深いんだなと感じています。

Pythonでも辞書があるの!?

あるんです。Javascriptのオブジェクトに近いですね。

まず、

{
   [キー]:[値、文字、関数など],
}

「{}(中カッコ)で囲む」

のが特徴です。

food={
   name:'apple',
   num:0,
}

のようなものをPythonでは

「辞書」

といいます。

辞書の要素の名前を

「キー」

といい、辞書の要素にアクセスしたい場合は、

[辞書の名前]['(キー)']

で行います。

たとえば、

food={
   'name':'apple',
   'num':0,
}

のように、リンゴの名前にアクセスしたい場合は、

foods['name']

と書くことでアクセスができます。

また、辞書は

「追加したり、書きかえたりすること」

ができます。

辞書の更新

辞書の更新の仕方は、

辞書名[キー]=書きかえたい数字・文字

でできます。

たとえば、

vegetables={
   'tomato':'',
}

があるとすると、

vegetables['tomato']='トマト'

とすることで

「トマト」

に変更することができます。

辞書の追加

vegetables={
  tomato:'トマト',  
}


とすると

vegetables['eggplant']='なすび'

のように

「存在しないキー」

でアクセスすることで作ることができます。

まとめ

いかがでしたでしょうか?

・配列[リスト、タプル型](シーケンス型)
・辞書

を知ることで、

「一挙にまとめる」

ことが可能になります。では、また次のNoteでお会いしましょう!!

この記事が気に入ったらサポートをしてみませんか?