2016-12-23 33 views
1

これを以下を関数を使用する関数に変換する方法を理解しようとしています。そのため、リスト全体を構築してリストをチェックする必要はありません。また、その後、私はどのようにこの問題を処理するために、より効率的な存在である。(一致するよりも、すべての順列を見つける。リスト圧縮またはジェネレーターで 'any'関数を使用する正しい構文

import itertools 
def is_merge(s, part1, part2): 
    for x in [''.join(word) for word in (itertools.permutations(part1+part2))]: 
     if x == s: 
      return True 
    return False 
+0

あなたは '' any( ''(join)== s for ...) 'を返しますか? – jonrsharpe

+0

そのアルゴリズムは正しくない。 「4321」は「12」と「34」のマージであるとみなされます。 – user2357112

+0

すべてのアルファベット文字の合併。文字があらかじめ単語を作ることができる順序にあったかどうか –

答えて

2

私はこれを行うための最も効率的な方法についてはよく分からないんだけど、anyを使用するようになります。この:。我々は、この多くのメモリを効率的に、リスト(なし[])を構築する必要はありません。これは単に()であなたのコード内で[]を交換することによって、しかしanyを使用せずに達成することができ

import itertools 
def is_merge(s, part1, part2): 
    return any(''.join(word) == s for word in itertools.permutations(part1+part2)): 

注意、リストを発電機で置き換える。

(itertools.p...)に括弧が追加されています。

関連する問題