編集のみ
OPは、この操作を実行するための最速の方法について尋ねられたので、私は私のマシン上で(私は願っています)公正な試験により検討中のものをランク付けしました。目的は、辞書のキーがばらばらになっているかどうかを調べることで、dict_keys.isdisjoint()
メソッドが他のセットまたはリスト操作よりも勝つようです。
しかし、他の回答に記載されているように、これは相対辞書のサイズおよびそれらが互いに素であるかどうかによって大きく異なります。
これらのテストは、等しい(小さい)サイズの2つの分離した辞書に対してのみ行われます。
最速:dict_keys.isdisjoint()
例:
{"a": 1, "b": 2, "c": 3 }.keys().isdisjoint({ "d": 4, "e": 5, "f": 6}.keys())
タイミング:
>>> timeit.timeit('{"a": 1, "b": 2, "c": 3 }.keys().isdisjoint({ "d": 4, "e": 5, "f": 6}.keys())')
0.4637166199972853
2番手:set.isdisjoint()
例:
set({"a": 1, "b": 2, "c": 3 }.keys()).isdisjoint(set({ "d": 4, "e": 5, "f": 6}.keys()))
タイミング:
>>> timeit.timeit('set({"a": 1, "b": 2, "c": 3 }.keys()).isdisjoint(set({ "d": 4, "e": 5, "f": 6}.keys()))')
0.774243315012427
3番手:リストコンプとall()
:
例:
all(k not in {"a": 1, "b": 2, "c": 3 } for k in { "d": 4, "e": 5, "f": 6})
タイミング:
>>> timeit.timeit('all(k not in {"a": 1, "b": 2, "c": 3 } for k in { "d": 4, "e": 5, "f": 6})')
0.8577601349970791
4番手:not()
と対称差(^
)例:
not set({"a": 1, "b": 2, "c": 3 }.keys())^set({ "d": 4, "e": 5, "f": 6}.keys())
タイミング:
>>> timeit.timeit('not set({"a": 1, "b": 2, "c": 3 }.keys())^set({ "d": 4, "e": 5, "f": 6}.keys())')
0.9617313010094222
「すべて(kはaのkではbではない)」と読みやすいかもしれません。私はいつも 'not any'sを2度読む必要があります。xD –
非常に真実です。 – AChampion
これは設定された交差点よりも**高速**(OPが欲しい)ですか? – randomir