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