目次

set 集合型

ちょうど数学の「集合」のように扱われるので、集合型という。

集合型独自の関数が最初から用意されていたり、特定の処理をリストと比較して高速に行える。

2つの集合が1つでも共通要素を持つかのチェック

全ての共通要素を得る必要は無く、1つでもあるか無いかだけ調べたい場合、どのような書き方が速いか。

以下のサイトで、詳しく説明されている。

Test if lists share any items in python - Stack Overflow

  1. intersection
    • 他と比べてやや遅い
  2. generator expression
    • 共通要素の存在確率が高い場合、最も速くなり得る
    • 一方、確率が低い場合、かなり遅い
  3. disjoint
    • おすすめ
    • 安定して速い

generator expressionを除いては、遅くとも1回あたり0.2~0.3ミリ秒くらいなので、チェック回数が数万程度ならそこまで気にするものでもないだろう。

1.intersection

if a & b:
    pass  # 何らかの処理

aとbの共通要素を求めてから、要素が空かどうか調べる。

2.generator expression

if any(i in b for i in a):
    pass  # 何らかの処理

3.disjoint

if not a.isdisjoint(b):
    pass  # 何らかの処理

「2つの集合が共通要素を持たない」ことを調べる関数isdisjoint()を利用する