基本文法を扱います。
変数に複数の値を代入することを考えます。例えば、変数に[1, 2, 3, 4, 5]という整数を5つ格納します。この型をリスト型といいます。このリスト型の特徴は、要素の型が違っていてもいい点です。例えば、[Civic, sedan, 3, hatchback, 5]というように、文字列と整数が混じっていても構いません。
変数aに、「Civic」「sedan」「hatchback」という3つの文字列を代入し、その型を出力します。
In
a = ["Civic", "sedan", "hatchback"]
print(a)
type(a)
Out
['Civic', 'sedan', 'hatchback']
list
変数に複数の違う型の値を代入します。
In
a = ["Civic", 100, 200]
print(a)
type(a)
Out
['Civic', 100, 200]
list
変数を要素として確認することもできます。
In
sedan = 1
hatchback = 2
suv = 3
cartype = [sedan, hatchback, suv]
print(cartype)
Out
[1, 2, 3]
少しややこしくなるのですが、リスト型変数の要素にリスト型を格納することもできます。
In
a1 = ["sedan", 10]
a2 = ["hatchback", 20]
a3 = ["suv", 30]
a = [a1, a2, a3]
print(a)
Out
[['sedan', 10], ['hatchback', 20], ['suv', 30]]
リスト型変数からその要素を取り出します。リスト型の要素には0, 1, 2, 3, ...という番号が付けられていて、これをインデックス番号といいます。少し紛らわしいのですが、インデックス番号は0からつけられていることに注意しましょう。また、インデックス番号に「-」をつけると、最後から順に要素を指定できます。
In
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(a[1])
print(a[-2])
Out
2
8
リスト型変数からその要素を取り出して、新たなリスト型変数に代入するということもできます。このとき、一部の要素を連続して、あるいは一定間隔で取り出します。このような機能をスライスといいます。例えば、整数の並び1, 2, 3, 4, 5, 6, 7, 8, 9から3, 4, 5を取り出すといった操作です。書式は[開始:終了]で、開始から終了までを取り出します。[開始:終了:増分]のように、増分を指定することもできます。
In
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(a[2:5])
print(a[2:-2])
print(a[:5])
print(a[5:])
print(a[1:8:2])
Out
[3, 4, 5]
[3, 4, 5, 6, 7]
[1, 2, 3, 4, 5]
[6, 7, 8, 9]
[2, 4, 6, 8]
文字列から、その文字列を構成する要素を取り出すこともできます。
In
b = "hatchback"
print(b[2:5])
Out
tch
スライスの開始と終了を指定するとき、リストのインデックス番号は0から始まること、終了のインデックス番号の要素は含まれないこと、に注意します。上のb[2:5]の場合、「tch」が取り出されていますが、イメージ的には以下のように考えるとわかりやすいかも知れません。
文字列 h a t c h b a c k
インデックス 0 1 2 3 4 5 6 7 8 9
リストの要素は更新したり追加したりできます。リストのインデックス番号は0から始まります。そのインデックス番号を指定すれば、値を更新できます。リストの追加は「+」を使うのが基本ですが、append()メソッドを使ってリスト名.append(追加要素)としてもよいです。append()メソッドを使わないときは、追加要素をリスト型にする必要があり、[ ]で括ります。
In
ch = ["1","2","3","4","5"]
ch[0] = "a" # インデックス番号0の要素を文字列aで置き換える
print(ch)
ch[1:3] = ["b", "c"] # インデックス番号1から3の要素を文字列b,cで置き換える
print(ch)
ch = ch + ["F"] # リストに要素を追加するとき、「+」で連結する
ch += ["G", "H"] # 複数の要素を追加する
ch.append("9") # append()メソッドを使う
print(ch)
Out
['a', '2', '3', '4', '5']
['a', 'b', 'c', '4', '5']
['a', 'b', 'c', '4', '5', 'F', 'G', 'H', '9']
リストの要素を削除します。基本、リストの要素を削除するには、del リスト名[インデックス番号]と書いて、削除する要素のインデックス番号を指定します。スライスで指定してもよいです。
In
ch = ["A", "B", "C", "D", "F", "G", "H"]
del ch[1]
print(ch)
del ch[3:5]
print(ch)
Out
['A', 'C', 'D', 'F', 'G', 'H']
['A', 'C', 'D', 'H']
リスト型の変数を別の変数に代入するとき、注意すべきことがあります。以下のコードで、最初のprint()は、list_bにlist_aを代入していることを示します。その次のprint()は、list_bに文字列dddが追加されたことを示します。最後のprint()は元のlist_aを示しているのですが、表示結果には文字列dddが追加されています。
In
list_a = ["aaa","bbb","ccc"]
list_b = list_a
print(list_b)
list_b.append("ddd")
print(list_b)
print(list_a)
Out
['aaa', 'bbb', 'ccc']
['aaa', 'bbb', 'ccc', 'ddd']
['aaa', 'bbb', 'ccc', 'ddd']
このようなことが起きるのは、リスト型の変数を別の変数に代入したとき、両変数は、全く同じ場所に格納されているデータを参照しているからです。これを避けるには代入をやめ、copy()メソッドを使うか、list()を使うか、スライス[:](要素を全てコピー)を使います。
In
list_a = ["aaa","bbb","ccc"]
list_b = list_a.copy()
list_c = list(list_a)
list_d = list_a[:]
print(list_b)
print(list_c)
print(list_d)
Out
['aaa', 'bbb', 'ccc']
['aaa', 'bbb', 'ccc']
['aaa', 'bbb', 'ccc']
値の並びの要素を取り出すのにインデックス番号を指定するのではなく、キーと呼ばれる名前を付けてこれを指定します。要素の値(バリュー)をキーに対応付けて、このキーを指定することで要素を取り出します。これを辞書型といいます。書式は、{ キー1:バリュー1, キー2:バリュー2, ... }です。
In
city = {1 : "tokyo", 2 : "chiba", 3 : "yokohama"}
print(city)
type(city)
Out
{1: 'tokyo', 2: 'chiba', 3: 'yokohama'}
dict # 辞書型変数の型は「dict」
辞書型変数に格納されている要素を取り出すには、その要素に対応するキーを用いて、辞書名 [キー]とします。
In
city = {1 : "tokyo", 2 : "chiba", 3 : "yokohama"}
print(city[1])
Out
tokyo
キーを指定して、バリューを変えることで、以下のような使い方ができます。
In
city = {1 : "tokyo", 2 : "chiba", 3 : "yokohama"}
print("Aさんは、" + city[2] + "に住んでいます。")
print("Bさんは、" + city[3] + "に住んでいます。")
Out
Aさんは、chibaに住んでいます。
Bさんは、yokohamaに住んでいます。
辞書型変数の要素を変更あるいは追加するには、辞書名 [値のキー] = 値 と書きます。同じキーがあった場合、値が変更され、同じキーがなければ、値が追加されます。
In
city = {1 : "tokyo", 2 : "chiba", 3 : "yokohama"}
city[1] = "omiya"
print(city)
city[4] = "osaka"
print(city)
Out
{1: 'omiya', 2: 'chiba', 3: 'yokohama'}
{1: 'omiya', 2: 'chiba', 3: 'yokohama', 4: 'osaka'}
辞書型変数の要素を削除するには、del 辞書名 [値のキー] と書きます。
In
city = {1 : "tokyo", 2 : "chiba", 3 : "yokohama"}
del city[2]
print(city)
Out
{1: 'tokyo', 3: 'yokohama'}
while文は、条件式が偽(False)になるまで処理を繰り返します。書式は「while 条件式:...」です。この条件式が真(True)の間、while文の中の処理が実行され続けます。while文の中の処理は、字下げ(インデント)で指定します。字下げを忘れないようにしましょう。
In
m = 4
while m > 0:
print(m)
m -= 1
Out
4
3
2
1
while文の注意点として、条件式の変数の更新忘れ、条件式が不成立にならない、などがあります。ここで、while文とif文を組み合わせてみましょう。変数mが0でなければ、処理を続行します。このとき、変数mから1を引いた後に、if文があることに注意しましょう。
In
m = 4
while m != 0:
m -= 1
if m != 0:
print(m)
else:
print("end")
Out
3
2
1
end
繰り返し処理には、for文があります。書式は「for 繰り返し変数 in データの集まり:」です。データの集まりとしてリストなどがあります。そのデータの集まりの要素を一つずつ取り出して、繰り返し変数に代入し、for文の中のコードを実行します。以下のfor文では、データの集まりが"Hello World"という文字列になっています。
In
message = "Hello World"
for ch in message:
print(ch)
Out
H
e
l
l
o
W
o
r
l
d
for文の最後に”:”(コロン)を書くのを忘れないようにしましょう。また、繰り返し処理は、コードを字下げします。for文の「データの集まり」がリストの場合を見てみましょう。
In
car = ["civic","corolla","note"]
for x in car:
print(x)
Out
civic
corolla
note
for文の「データの集まり」にリストを用いたとき、何番目の要素なのか確認したいときがあります。こういうときは、enumerate()を使います。繰り返し変数を二つにして、一方がインデックスになり、もう一方が要素になります。書式は「for x, y in enumerarte(リスト型変数):」です。先がインデックス、後が要素になり、その変数名は変更できます。
In
car = ["civic","corolla","note"]
for index, value in enumerate(car):
print(index, value)
Out
0 civic
1 corolla
2 note
辞書型変数の繰り返しでは、キーとバリューの両方を変数として繰り返します。要素をバリューとしてキーに対応付けて、このキーを指定することで要素を取り出すのでした。items()を使って、「for keyの変数名, valueの変数名 in 変数(辞書型).items():」とします。
In
car = {"civic":"white","corolla":"black","note":"blue"}
for carname, color in car.items():
print("The "+carname+" is "+color+".")
Out
The civic is white.
The corolla is black.
The note is blue.
for文をif文と組み合わせて、ある条件のときに、繰り返し処理を途中で終了したり、繰り返し処理を一回分スキップしたりすることができます。
In
# breakの例
a = [1, 2, 3, 4, 5, 6]
for x in a:
print(x)
if x >= 3:
print("ここでbreak")
break
Out
1
2
3
ここでbreak
In
# continueの例
a = [1, 2, 3, 4, 5, 6]
for x in a:
if x == 3:
continue
print(x)
Out
1
2
4
5
6