配列 (List) と書きながら、集合 (Set) とかもここに書いてしまった。
numpy でなくても array 型があるのを今知った。
module
組み込み型
l = [1,2,3,4,5,6]
l[0] 一番目
スライス
l[2:]
l[::2] 1文字飛ばし
Lecture 16 リストの操作
s[0] = "X" 要素の書き換え
s[2:5] = ['C','D','E']
s[2:5] = [] フラッシュ
リストの初期化
s = [0] * 4 # N個の 0 のリスト
文字列とリスト
文字列はリストと見ることができる。基本的に何もしなくても、「文字のリスト」とみなせる。
for s in S: # S = "abcdefg"
print(s)
リストとして明示するなら
list("abcdefg") 1文字ずつリスト化
反対向きに、.join(a) もある
','.join(a) # 上の続きで、"a,b,c,d" が返る
" ".join(list(map(str, a)))
- map(str, a) で a の要素を一つ一つstr に変換。
- 出てきたものを list で リスト化
- 文字のリストを " " でつないで一つの「文字列」にしている。
参照である。
a = []
の a 自体は参照先なので
tmp = a
としてから、tmp を変更すると、a も変わる。
変えたくないなら、 tmp = a.copy() で渡す
多重配列時の注意
追加
s.append(100) # 一番右(後ろ)につける O(1)
s.insert(場所、数字)# 場所を指定して入れる O(n)
s = [1,2,3]
s[1] = [0,1,2] # [1, 0, 1, 2, 3]
s.pop(0) 先頭をポップする
連結
A = [1,2,3]
B = [4,5,6]
A.extend(B) # A = [1,2,3,4,5,6] O(k)
A.extend(B) の戻り値ではない(Aが変更される)ことに注意
削除
n.remove(2) 2文字目削除
リストの足し算は、連結
Lecture 17 : リストのメソッド
r.index(3) 3が現れるインデックス
要素の数え上げ
要素数が多いときに、可能性がある全ての因子で.count()を回すと、時間がかかる場合がある。その場合は、
import collections
c = collections.Counter(l) # c は辞書型(のサブクラスのCounter型)
として、回数を求めることができ、こっちのほうが早かった。
並べ替え
l.sort()
自分自身が並べ変わる
sorted(l)
こちらは、並べ変わったリストが返る
並べ方
逆順に並べる
r.sort(reverse=True)
アルファベットを、大文字小文字関係なく並べる
ASCII順だと大文字と小文字が別に扱われるので key=str.lower を指定する
l.sort(key=str.lower)
r.reverse()
r.split("_")
.join()
Lecture 18 リストのコピー
i = j リストは参照渡し
j.copy なら実体渡し
j[:] なら実体渡し
id(x) アドレスのようなもの
Lecture 19 リストの使い所
集合(Set)
配列を「要素の集合」(順番は重要でない)とする場合は、set型を用いることもできる。組み込み型なので、import は不要。
集合なので、重複要素は一つにまとめられる。
s = set() # 空集合の初期化
s1 = set([1,2,3]) #
s2 = set([2,3,4]) #
s12 = s1 | s2 # 和集合
s1_2 = s1 & s2 # 積集合
# 配列と同じで類推できるもの
len(s) # 集合 s の要素数 (s の濃度) を返します。
x in s # x が s のメンバーに含まれるか判定します。
x not in s # x が s のメンバーに含まれていないことを判定します。
isdisjoint(other)
集合が other と共通の要素を持たないとき、True を返します。集合はそれらの積集合が空集合となるときのみ、互いに素 (disjoint) となります。
issubset(other)
set <= other # set の全ての要素が other に含まれるか判定
set < other # set が other の真部分集合であるかを判定
issuperset(other)
set >= other # other の全ての要素が set に含まれるか判定します。
set > other # set が other の真上位集合であるかを判定
set.union(*others) # 和集合の別の書き方
set.intersection(*others) # 積集合の別の書き方
set.difference(*others) #
set - other - ... # set に含まれて、かつ、全ての other に含まれない要素を持つ、新しい集合
symmetric_difference(other)
set ^ other # 排他集合
copy() # 集合の浅いコピーを返します。
set に要素を加える
SET.add(value)
set から要素を取り出す
集合なので順番がない。添字では取り出せない。とりあえずpop()する。
何かしらの順番を作って、出すなら一旦リスト化 list(set) にする?
スタック、キュー
スタック
スタックなら、配列の append(), pop() で実装できる。
キュー
後ろから入れても、先頭から出せないので、collections モジュールから deque に登場してもらう必要あり。.popleft() で先から出す
from collections import decue
c = decue()
c.append(x) # x を右側につけ加える
c.appendleft(x) # x を左側につけ加える
c.pop() # 右側から要素をひとつ削除し、その要素を返す。要素がひとつも存在しない場合は IndexError を発生する。
c.popleft() # 左側から要素をひとつ削除し、その要素を返す。要素がひとつも存在しない場合は IndexError を発生する。
c.extend(iter) # イテラブルな引数 iter から得られる要素を右側に追加し拡張する。
c.extendleft(iter) # イテラブルな引数 iter から得られる要素を左側に追加し拡張します。注意: 左から追加した結果は、イテラブルな引数の順序とは逆になります。
c.clear() # すべての要素を削除し、長さを 0 にします。
copy()
deque の浅いコピーを作成します。バージョン 3.5 で追加.
c.count(x) # x に等しい要素を数え上げます。バージョン 3.2 で追加.
index(x[, start[, stop]])
deque 内の x の位置を返します (インデックス start からインデックス stop の両端を含む範囲で)。最初のマッチを返すか、見つからない場合には ValueError を発生させます。
バージョン 3.5 で追加.
insert(i, x)
x を deque の位置 i に挿入します。
挿入によって、長さに制限のある deque の長さが maxlen を超える場合、IndexError が発生します。
バージョン 3.5 で追加.
c.remove(x) # x の最初に現れるものを削除します。要素が見付からないない場合は ValueError を送出します。
c.reverse() # 要素をインプレースに反転し、None を返します。
バージョン 3.2 で追加.
c.rotate(n=1) # 要素を全体で n ステップだけ右にローテートします。n が負の値の場合は、左にローテートします。
# deque が空でないときは、 deque をひとつ右にローテートすることは d.appendleft(d.pop()) と同じで、 deque をひとつ左にローテートすることは d.append(d.popleft()) と同じです。
deque オブジェクトは読み出し専用属性も 1 つ提供しています:
maxlen
deque の最大長で、制限されていなければ None です。
バージョン 3.1 で追加.
優先度付きキュー
最終更新:2020年06月27日 18:40