2015-10-11 3 views
1

Я не уверен, как это сделать в Python. В поисках этого я столкнулся с itertools, но я не уверен, как я могу применить его в этом случае.Создание комбинаций из ввода в python

Что я пытаюсь сделать, это создать скрипт, который может принимать строковый ввод, содержащий метки запросов (например, AB? D?) И набор параметров (ABC, DEF) для вывода всех возможных комбинаций, например ниже ,

ABADD, ABADE, ABADF 
ABBDD, ABBDE, ABBDF 
ABCDD, ABCDE, ABCDF 

В поиске, я нашел this, но я не совсем уверен, как я мог бы быть в состоянии осуществить это вокруг моего входа.

Было бы наиболее эффективным разбить входную строку на несколько подстрок вокруг вопросительных знаков (поэтому приведенный выше пример становится AB +? + D +?). Будет ли что-то вроде списка (-ов) подходящим для этого?

Заранее благодарим за предоставленную помощь.

+0

ли '' ABC' и DEF' фиксируется на позиции, соответствующей '' S? Также, несмотря на то, что вы не уверены в этом подходе, вам, вероятно, следует использовать код, который вы попробовали. – KobeJohn

+0

Я думаю, что это простая проблема с заменой строки с циклом for, поэтому я могу написать необходимый код, но вы должны подождать некоторое время. http://www.tutorialspoint.com/python/string_replace.htm – mertyildiran

ответ

4

Вы можете использовать itertools.product, чтобы получить комбинации и string.format, чтобы объединить их в строку шаблона. (Во-первых, заменить ? с {}, чтобы получить format string syntax.)

def combine(template, options): 
    template = template.replace('?', '{}') 
    for opts in itertools.product(*options): 
     yield template.format(*opts) 

Пример:

>>> list(combine('AB?D?', ['ABC', 'DEF'])) 
['ABADD', 'ABADE', 'ABADF', 'ABBDD', 'ABBDE', 'ABBDF', 'ABCDD', 'ABCDE', 'ABCDF'] 
+1

Ничего себе симпатичная компактная форма и все еще читаемая. @ 534, если неясно, '' {} ''помещает заполнители в общую строку, заполняемую строкой' string.format() '. – KobeJohn

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