Python公式チュートリアルを頑張って読んでいる 5.データ構造
色々とPythonの初心者用の本やサイトを見て学ぼうとしても「タプル」とか「リスト」とかの横文字が入ると解説の意味が分からなくなってたぐらい頭弱いんだけど...
最近ようやくコードと解説を見て理解出来るようになってきたのでプログラミングが楽しくなってきました(^_^)
とりあえずは会社の業務を効率化させられたらなぁって目標です。
以下自分用の備忘録です。(ノートにでも書いとけとか言わないでw)
5.データ構造
list.append(x)
このlistが関数で、
appendがメソッドって言われるやつで、
xが引数。
一つの関数に複数のメソッドがある。
listなら他にも
- list.extend(iterable)
- list.insert(i, x)
- list.remove(x)
とか色々ある。
関数に「これやれ!」って指示するのがメソッドかな?
引数がその対象になるみたいなイメージ。
5.1.1 リストをスタックとして使う
スタック(last-in, first-out)で使うなら
stack = [3, 4, 5]
stack.append(6)とか
stack.pop()でOK。
5.1.2 リストをキューとして使う
キュー(first-in, first-out)の場合は要素を最初とか途中に入れる場合、
appendやpopはリストの末尾から遡るので遅くなる(?)からcollections.dequeを使うと良いらしい。多分popleftメソッドがあるからだと思う。
>>> from collections import deque
>>> queue = deque(["Eric", "John", "Michael"])
>>> queue.append("Terry") # Terry arrives
>>> queue.append("Graham") # Graham arrives
>>> queue.popleft() # The first to arrive now leaves
'Eric'
>>> queue.popleft() # The second to arrive now leaves
'John'
>>> queue # Remaining queue in order of arrival
deque(['Michael', 'Terry', 'Graham'])
5.1.3 リストの内包表記
リストの書き方って色々あるなぁって話
>>> squares =
>>> for x in range(10):
... squares.append(x**2)
...
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
こうも書ける↓
squares = list(map(lambda x: x**2, range(10)))
こうも書ける↓
squares = [x**2 for x in range(10)]
xとyが違う値の要素を抜き出す↓
>>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
これと一緒↓
>>>combs =
>>>for x in [1, 2, 3]:
for y in [3, 1, 4]:
if x != y:
combs.append*1
5.1.4 ネストしたリストの内包表記
>>> matrix = [
... [1, 2, 3, 4],
... [5, 6, 7, 8],
... [9, 10, 11, 12],
... ]
このmatrixの行と列を入れ替える。↓
>>>[[row[i] for row in matrix] for i in range(4)]
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
iは0~3まで繰り返す。
for row in matrixで、最初は[1, 2, 3, 4]を持ってきて、
row[i]だから、最初はrow[0]、つまり[1, 2, 3, 4]の0番目の要素、1を取り出す。
次は[5, 6, 7, 8]の0番めの要素、5を取り出す。次は[9, 10, 11, 12]の0番目の9を取り出す。
iが0の時に取り出した要素が[1, 5, 9]、これをiが3になるまで繰り返す。
5.4 集合型
pythonは集合を使える。和集合とか。set関数を使う。
*1:x, y