0

辞書をテストして、部分的な文字列を含むキーが含まれているかどうかを確認しようとしています。具体的には、各羽のコントロールを辞書に割り当てる翼ジェネレーターを構築しています。翼をミラーリングするためのボタンをクリックすると、翼が既にミラーリングされているかどうかをテストする必要があります (その後、元に戻す/削除されているかどうかをテストする必要がありますが、それはこの質問の一部ではなく、簡単にテストできます)。これを行うには、フェザー ディクショナリをチェックして、"L_" と "R_" の両方を含むキーがあるかどうかを確認します。

次のコードは私が望むことを行いますが、かなり冗長です。それを行うには、よりシンプルでエレガントな方法が必要です。

dict={}
RS=False
LS=False
for each in dict:
    if "L_" in each:
        LS=True
    if "R_" in dict:
        LS=True
if LS and RS:
    print "has both"

あるいは、別のグローバル変数を作成し、ミラーリングされた真/偽の値をテスト用に格納する方が簡単でしょうか? グローバル変数を最小限に抑えようとしていますが、それらがリソースにどのように影響するかは不明です。アドバイスをいただければ幸いです。

4

3 に答える 3

1

この方法は冗長ではなく、一致するキーが見つかったときに検索を早期に中断する機会がありますが、最悪の場合でもキーを 2 回完全にパスします。

if any('L_' in key for key in dict) and any('R_' in key for key in dict):
    print 'has both'

注:探しているのと同じキーに表示されるかどうかは、質問では少しあいまいですL_R_)。その場合は、次を使用します。"...L_...R_..."

if any('L_' in key and 'R_' in key for key in dict):
    print 'has both'

この方法はより冗長ですが、できるだけ早く発生し、最悪の場合でも 1 つのパスしか作成しません。

RS=False
LS=False
for each in dict:
    if "L_" in each:
        LS=True
    if "R_" in dict:
        RS=True
    if LS and RS:
        print 'has both'
        break

どちらを使用するかは、辞書に多くのキーがある場合に最適化を行う必要があるかどうかに依存し、最悪の場合に 1 つのパスのみを作成することが役立ちます。

于 2013-05-15T14:52:56.163 に答える