pythonのlistとsetについて 計算量など

前回の記事からの派生です。

pythonのListでa in listと書くとO(n)かかってしまうとのこと。
これを解決するために、Listではなくsetを使うといいようです。

ただ、setってちょっと扱いが面倒だったりするイメージ
なので、setとlistでできること、変換をまとめました。

また、計算量については以下を参考:
TimeComplexity - Python Wiki

・List
特徴:要素の書き換え可能
list_a=[]
list_a.append(a) #O(1)
list_a.pop() #O(1)
list_a.pop(3) #O(n) 使用注意!
a in list_a #O(n)

・Set
特徴:要素の書き換え不可
set_a=set() # {}だけだとdict型になる
set_a.add(a) #O(1) 値重複時は無視される
set_a.remove(a) # O(n) 値を消せる
a in set_a #O(1)

・こんなこともできる
A = {1,2,3}
B = {3,4,5}

C = A | B # 和集合 {1,2,3,4,5}
C = A & B # 積集合 {3}
C = A - B # 差集合 {1,2}
C = A ^ B # 排他的論理和 {1,2,4,5}

・変換
set_b = set(list_a) # listをsetに変換
set_c = set(strings) # 文字列をsetで変換、文字要素を重複なしで抽出できる

list_b = list(set_a) # setをlistに変換
list_c = list(strings) # 文字列をlistで変換、文字要素を単独で切り出せる



・参考 tupleについて
要素の追加、削除、変更ができない
setと混同していたので念のため記載・・・