2016-12-23 2 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

Вы имеете в виду 'return any (''. Join (word) == s for ...)'? – jonrsharpe

+0

Этот алгоритм даже не верен. Он считает, что «4321» является слиянием «12» и «34». – user2357112

+0

Слияние всех символов алфавита. Независимо от того, были ли персонажи в порядке, который мог бы сделать слово до –

ответ

2

Я не уверен, что наиболее эффективный способ сделать это, но с использованием any будет выглядеть это:.

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

Обратите внимание, что мы не должны строить список (без []), что делает это гораздо меньше памяти Это может быть достигнуто без использования any однако, просто заменив [] в коде с (), заменяя список генератором.

Также обратите внимание, что у вас есть дополнительная пара скобок на (itertools.p...).

Смежные вопросы