0
、例えば:チェック並列処理
mydir/
test1.abc
set123.abc
jaja98.abc
test1.xyz
set123.xyz
jaja98.xyz
私はすべての.abc
ファイルに対して同等.xyz
ファイルがあることを確認する必要があります。このような何かが失敗するだろうが
>>> filenames = ['test1.abc', 'set123.abc', 'jaja98.abc', 'test1.xyz', 'set123.xyz', 'jaja98.xyz']
>>> suffixes = ('.abc', '.xyz')
>>> assert all(os.path.splitext(_filename)[0]+suffixes[1] in filenames for _filename in filenames if _filename.endswith(suffixes[0]))
上記のコードは、アサーションを渡す必要があります:私はこのようにそれを行うことができ
>>> filenames = ['test1.abc', 'set123.abc', 'jaja98.abc', 'test1.xyz', 'set123.xyz']
>>> suffixes = ('.abc', '.xyz') >>> assert all(os.path.splitext(_filename)[0]+suffixes[1] in filenames for _filename in filenames if _filename.endswith(suffixes[0]))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AssertionError
しかし、それは少しも冗長です。
同じチェックを行う方が良いですか?
リストを使ったリニア検索よりも速いメンバーシップチェックを行うセットを使うと、効率をさらに向上させることができます。 – martineau
@martineau上記の例では、セットを使用しています。もちろん、 'ファイル名'全体を 'set'に変換して、問題と同じことをすることができます。実際にはもっと効率的かもしれませんが、それはまだ** O(n)**です。 – niemmi
申し訳ありませんが、私の間違いです。時間の複雑さに関するあなたの声明は私を捨てました。それは** O(n)**よりも優れています**(ほぼ)** O(1)** - [_Time複雑なPythonセット操作?_](http://stackoverflow.com/questions/7351459/time -complexity-of-python-set-operations) – martineau