python学習 1時間(累計4時間)
リストの使い所
---例タクシーの乗客
>>> seat = [] --- タクシー
>>> min = 0 --- 最小人数
>>> max = 5 --- 最大人数
---乗れるか判定
>>> min <= len(seat) < max
True
>>> min <= len(seat) < max
True
---乗客乗った
>>> seat.append('p')
>>> seat.append('p')
--- まだ乗れる
>>> min <= len(seat) < max
True
>>> seat.append('p')
>>> len(seat)
3
>>> seat.append('p')
>>> seat.append('p')
>>> len(seat)
5
---もう乗れない
>>> min <= len(seat) < max
False
>>> seat.pop(0)
'p'
>>> min <= len(seat) < max
タプル型
説明() で配列のようにデータを格納することができる
ただし、一度代入をしてしまうと後からデータの追加などはできない。
そのため、最初にデータを入れて後から変更されたくない場合などに使う。
データの参照、count やindexメソッドだけある。
--- タプルの宣言
>>> t = (1, 2, 3, 4, 1, 2)
>>> t
(1, 2, 3, 4, 1, 2)
>>> type(t)
<class 'tuple'>
--- 配列みたいに追加をしようとするとエラー
>>> t[0] = 100
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
--- 参照自体は配列と同じ参照の仕方が可能
>>> t[0]
1
>>> t[-1]
2
>>> t[2:5]
(3, 4, 1)
>>> t
(1, 2, 3, 4, 1, 2)
>>> t.index(1)
0
>>> t.index(1, 1)
4
>>> t.count(1)
2
--- タプルの中に配列を格納することが可能
>>> t = ([1, 2, 3], [4, 5, 6])
>>> t
([1, 2, 3], [4, 5, 6])
>>> t[0][0]
1
--- タプルに追加しようとしてるからエラー
>>> t[0] = [1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
--- でもタプルの中の配列になら追加が可能
>>> t[0][0] = 100
>>> t
([100, 2, 3], [4, 5, 6])
--- () を使わなくても , が入った時点でタプルとして認識される
>>> t = 1, 2, 3
>>> type(t)
<class 'tuple'>
>>> t
(1, 2, 3)
--- 一個でもタプル
>>> t = 1,
>>> t
(1,)
--- ,がなければ当然int型
>>> t = 1
>>> type(t)
<class 'int'>
>>> t = 1,
>>> type(t)
<class 'tuple'>
--- ()だけの宣言でもタプル
>>> t = ()
>>> type(t)
<class 'tuple'>
>>> t
()
--- ()入れても, がなければint
>>> t = (1)
>>> type(t)
<class 'int'>
>>> t
1
--- ()入れても, がなければstr
>>> t = ('test')
>>> type(t)
<class 'str'>
>>> t
'test'
--- ,入れた時点でタプル
>>> t = ('test',)
>>> t
('test',)
---タプルに100を足そうとするとエラー意図しない, はバグの原因だから気をつけよう
>>> t = 1,
>>> t + 100
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate tuple (not "int") to tuple
--- タプルに後から追加はできないけど下記みたいな追加ならできる
>>> new_tuple = (1, 2, 3) + (4, 5, 6)
>>> new_tuple
(1, 2, 3, 4, 5, 6)
--- int 型とtuple 型だからエラー
>>> new_tuple = (1) + (4, 5, 6)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'tuple'
---,さえ入って入れば問題なし
>>> new_tuple = (1,) + (4, 5, 6)
>>> new_tuple
(1, 4, 5, 6)
タプルのアンパッキング()
#タプルの宣言
num_tuple = (10, 20)
print(num_tuple)
# , で区切って宣言することでタプルをそのまま代入できる
x, y = num_tuple
print(x, y)
x, y = 10, 20
print(x, y)
#2個とかの変数だったらタプルでの宣言が見やすい
min, max = 0, 100
#変数の数が増えてしまうと見にくいので注意
a, b, c, d, e, f = 'Mike', '1', '1', '1', 'e', 'f'
#こんな場合は普通通り1つづつのほうが見やすい
a = 'Mike'
b = '1'
#変数内のデータを入れ替える場合
i = 10
j = 20
tmp = i
i = j
j = tmp
print(i, j)
#普通上で3行かかっていたものがタプルを使えば1行
a = 100
b = 200
print(a, b)
a, b = b, a
print(a, b)
タプルの使い所
#タプルで宣言した場合
chose_from_two = ('A', 'B', 'C')
#タプルで表示した回答の中から2つ選ばせてリストに入れよう
answer = []
#仮に間違って選択肢の方に格納をしようとしてしまった
#エラーが出てしまってすぐにバグだとわかる!!
#chose_from_two.append(chose_from_two[0])
#chose_from_two.append(chose_from_two[2])
answer.append(chose_from_two[0])
answer.append(chose_from_two[2])
print('選択肢 ',chose_from_two)
print('回答 ',answer)
#配列で宣言をした場合
chose_from_two = ['A', 'B', 'C']
#タプルで表示した回答の中から2つ選ばせてリストに入れよう
answer = []
#仮に間違って選択肢の方に格納をしようとしてしまった
#配列だから追加できちゃう!!選択肢に回答が追加されちゃう!やばい
chose_from_two.append(chose_from_two[0])
chose_from_two.append(chose_from_two[2])
answer.append(chose_from_two[0])
answer.append(chose_from_two[2])
print('選択肢 ',chose_from_two)
print('回答 ',answer)
出力結果
--- タプルの方
選択肢 ('A', 'B', 'C')
回答 ['A', 'C']
--- リストの方
選択肢 ['A', 'B', 'C', 'A', 'C']
回答 ['A', 'C']
Process finished with exit code 0
辞書型
--- {} で宣言をして キーと値を入れることで辞書型のデータを作成ができる
>>> d = {'x': 10, 'y': 20}
>>> d
{'x': 10, 'y': 20}
>>> type(d)
<class 'dict'>
--- データ参照の仕方
>>> d['x']
10
>>> d['y']
20
--- キーを指定すれば値を入れ替えることも
>>> d['x'] = 100
>>> d
{'x': 100, 'y': 20}
---もちろん数字だけでなく文字も
>>> d['x'] = 'XXXX'
>>> d
{'x': 'XXXX', 'y': 20}
--- 新しいキーを宣言すればデータ数の追加も可能
>>> d['z'] = 200
>>> d
{'x': 'XXXX', 'y': 20, 'z': 200}
--- キーも数字でいける
>>> d[1] = 10000
>>> d
{'x': 'XXXX', 'y': 20, 'z': 200, 1: 10000}
---その他辞書型の宣言の仕方
>>> dict(a=10, b=20)
{'a': 10, 'b': 20}
--- 配列で宣言してその中にタプルでもいける(ほぼ使わない)
>>> dict([('a', 10), ('b', 20)])
{'a': 10, 'b': 20}
辞書型のメソッド
---辞書型の宣言
>>> d = {'x': 10, 'y': 20}
>>> d
{'x': 10, 'y': 20}
>>> help(d)
--- .key()で辞書型内のキーを取得
>>> d.keys()
dict_keys(['x', 'y'])
--- .values()で辞書型内の値を取得
>>> d.values()
dict_values([10, 20])
>>> d2 = {'x': 1000,'j': 500}
>>> d2
{'x': 1000, 'j': 500}
--- .update()をすることで辞書型にデータをオーバーライドできる
>>> d.update(d2)
>>> d
---すでにあるキーの値は上書き、なかったものは追加
{'x': 1000, 'y': 20, 'j': 500}
>>> d['x']
1000
--- .get()メソッドでも同じようにデータの取得が可能
>>> d.get('x')
1000
>>> d
{'x': 1000, 'y': 20, 'j': 500}
--- .pop を使うことでキー値ごと取り出しが可能
>>> d.pop('x')
1000
>>> d
{'y': 20, 'j': 500}
--- del で削除
>>> del d['y']
>>> d
{'j': 500}
--- delは強力だから辞書型のタイプごと削除できてしまう
>>> del d
>>> d
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'd' is not defined
>>> d = {'a': 100, 'b': 200}
>>> d
{'a': 100, 'b': 200}
--- データ型を消さないようにするには.clear()
>>> d.clear()
>>> d
{}
>>> d = {'a': 100, 'b': 200}
>>> d
{'a': 100, 'b': 200}
--- in を使うことで辞書型内に特定の値があるか判別が可能
>>> 'a' in d
True
--- ない値だとFalseが返る
>>> 'j' in d
False