【ぱいそん】はじめました。忘備録⑤リスト、連想配列とループ処理【Python】
引き続き以下の動画で勉強中。
いろいろしてたら、早二日……。
複数の値をまとめたものリスト (配列)
空の配列
[]
文字列の配列
["PHP","Ruby"]
数値の配列
[1,2]
型の混在もできる。
["Python",2]
配列は、ブラケット記号 [ ] で囲み、中身は、カンマ , で区切る。
また、配列は上限がないので、好きなだけ中に入れられる。
配列には、先頭から順番に、インデックスと言う番号が割り当てられる。
インデックスは、0から始まり、0,1,2……と割り当てられる。
例えば、変数arrにPHP、Ruby、Pythonの3つの文字列を格納して、それぞれを出力する場合、
arr=["PHP","Ruby","Python",] print(arr[0]) print(arr[1]) print(arr[2])
となりそれぞれ、インデックスの0番目にPHP、1番目がRuby、2番目がPythonと割り当てられる。
そのため、arr[0]ではPHPが、arr[1]ではRubyが、arr[3]ではPythonがそれぞれの値として返される。
つまり、print(arr[0])では、PHPが、print(arr[1])ではRubyが、print(arr[2])ではPythonが出力される。
好きなキー名を付けられる辞書(連想配列)
配列のインデックス番号ではわかりにくい場合、インデックス番号の代わりに好きなキー名をつけて、配列を作成することができます。
これを連想配列と言い、Pythonでは辞書と呼びます。
他のプログラミング言語では、連想配列と言う方が多いので、Pythonの辞書=他のプログラミング言語の連想配列であることは覚えておいた方がよいです。
arr={"key1":"Python","key2":"Ruby"} print(arr["key1"])
連想配列では、値を取り出す時には、つけた名前を指定して取り出します。
このコードの場合、配列の中で、PythonにKey1と言う名前を、RubyにKey2と言う名前を付けています。
そして、2列目の、arr[”Key1”]では、Key1と言う名前のPythonを出力します。
Pythonでは、配列(リスト)をlist型、連想配列(辞書)をdict型となります。
変更できない配列タプル
()を使って配列を先性するとタプルとなります。
arr=[1,2] tuple=(1,2) arr[0]=3 tuple[0]=3
このコードのarrは普通の配列で、tupleはタプルの配列になります。
arr[0]には、最初、1が格納されていましたが、arr[0]=3が実行されることにより、3が上書きされ、arr=[3,2]になります。
同様にtuple[0]には最初、1が格納されています。しかし、tuple[0]=3を実行すると、TypeError: 'tuple' object does not support item assignmentのエラーが出ます。
つまり、絶対に変更されたくない配列に関しては、タプルを使うことで、変更できない配列にすることができます。
配列でできるいろいろなこと
配列の中に配列を入れることができる。これを多次元配列と呼びます。
[[1],[2]]
配列の中に連想配列を入れることができる。
[{"Key1:1"}]
連想配列の中に配列を入れることができる。
{"key1":[1]}
配列の要素を一つずつ取り出して処理するループ処理
配列の要素を一つずつ順番に取り出して処理することをループ処理と言います。
ループ処理にはfor文を使います。
for 変数名 in 配列: "ループ中の処理" "ループ中の処理" "ループの外"
のように、for ~ in ...:と書いて、ループ中の処理は、インデントを入れてから書きます。
インデントが続く限りループの中の処理となり、インデントがなくなったら外に出たことになります。
arr=["Python","Ruby"] for lang in arr: print(lang) print("ループの外に出た!")
このコードでは、最初に、arrの中にPythonとRubyの文字列が格納されています。
そして、このコードが実行された場合、for文の中の変数langに一つ目の文字列Pythonが格納され、出力されます。
次に、変数langの中に二つ目の文字列Rubyが格納され、出力されます。
今回は、変数arrの中身が2つしかないので、ここでループは終わり、4行目のループの外に出た!が出力されて終了となります。
for文は、スコープを作らないので、ループ変数も内部で宣言された変数(このコードの場合のlang)もfor文の外側と共有されます。
arr=["Python","Ruby"] for lang in arr: print(lang) print(f"外に出た{lang}")
なので、このコードの場合、出力されるのは、Python、Ruby、外に出たRubyとなります。
他のプログラミング言語であれば、エラーになるので、注意が必要です。
連想配列のループ処理
Pythonで連想配列でfor文を使うと、キーの値のみが取り出されます。
arr={"Key1":"Python","Key2":"Ruby"} for key in arr: print(key)
上のコードを実行すると、Key1とKey2が出力されます。
連想配列では、値を取り出す時、arr[”Key1”]のようにキーを指定します。
ループ処理の中では、変数Keyにキーの値が入ってくるので、arrのキーの指定として、変数Keyを使うことで、値を取り出すことができます。
つまり以下のコードのように書けは、値を取り出すことができます。
arr={"Key1":"Python","Key2":"Ruby"} for key in arr: print(arr[key])
実行すると、1度目の変数keyの値は、Key1となります。
つまり、print(arr[key1])を実行したのと同じ意味になり、Pythonが出力されます。
2周目では、変数Keyの値は、key2になります。
なので、print(arr[key2])を実行したのと同様にRubyが出力されます。
items()を使ってより簡単に連想配列をループ処理する
arr={"Key1":"Python","Key2":"Ruby"} for key,val in arr.items(): print(f"{key}は{val}です")
このコードでは、変数Keyの部分には、連想配列のキーが代入され、変数valの部分には、連想配列を値が代入されます。
そのため、1周目では、Key1はPythonですと表示され、2周目では、Key2はRubyですと表示されます。
items()を使う事で、連想配列のループ処理が簡単になりますね !
continueを使ってループ処理をスキップする
arr=["Python","Ruby","PHP"] for lang in arr: if lang == "Ruby": continue print(lang)
このコードでは、Rubyと言う文字列の場合には、その次の処理がスキップされます。
つまり、1周目では、Pythonが表示され、2周目では、Rubyの表示がスキップされ、3週目ではPHPが表示されるので、最終的に出力されている文字列は、PythonとPHPのみになります。
breakでループ処理を強制終了する
arr=["Python","Ruby","PHP"] for lang in arr: if lang == "Ruby": break print(lang)
このコードでは、Rubyと言う文字列の場合の処理に入った時点で、コードが強制終了されます。
つまり、1周目では、Pythonが表示され、2周目のRubyに入った時点で、コードが終了し、3週目のループはしない事になります。
そのため、最終的に表示されている文字列は、Pythonのみとなります。
その処理に入ったら、それ以降の処理をしないようにしたい場合に、breakを使います。