全文一致で行うしかないのでしょうか。
O(1) にしたければ、全文一致で行うしかありません。
set は要素のアクセスは O(1) ですが、部分文字列ではハッシュテーブルを参照できません。
なので、部分文字列で調べる場合、質問のコードのように各要素に指定文字が含まれるかどうか判定する必要があります。
numpy を使って判定を Python のコードとして実行するのを避ければ、同じ O(n) だとしても30倍ぐらいは高速になります。
for-loop で確認していく方法
python
1s = []
2for i in range(10000):
3 s.append(f"https://m{i}")
4s = set(s)
python
1%%timeit
2for val in s:
3 if "m34" in val:
4 pass
5# 501 µs ± 1.29 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
numpy.isin() で確認する方法
python
1import numpy as np
2
3s = []
4for i in range(10000):
5 s.append(f"https://m{i}")
6s = np.array(s)
python
1%%timeit
2np.isin(s2, "m34");
3# 17.9 µs ± 34.8 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
numpy を使えば、処理は C 言語で書かれたコードで実行されるため、高速になります。
Python と C 言語だと速度に最大100倍ぐらい差があります。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。