Перестановка букв - PullRequest
1 голос
/ 05 июня 2019

Я пытаюсь получить все перестановки буквенных символов для строки и добавить их в один список следующим образом:

allperm('an') should produce:
['an', 'aN', 'An', 'AN']

но мой вывод состоит из нескольких списков:

['a', 'n']
['a', 'N']

Это мой текущий код

def allperm(password):
   n = len(password)

   #2^n permuations
   max = 1 << n

   #lowercase password (base)
   password = password.lower()

   #get all permutations
   for i in range(max):
       perm  = [k for k in password]
       for j in range(n):
           if (((i >> j) & 1) == 1):
               perm[j] = password[j].upper()

       #add to list
     temp = ""
      for i in perm:
           temp += i
      return(temp)

1 Ответ

3 голосов
/ 05 июня 2019

Вы можете zip прописные буквы пароля с прописными и передать их в itertools.product для генерации желаемых перестановок:

from itertools import product
def allperm(password):
    return list(map(''.join, product(*zip(password.lower(), password.upper()))))

так что allperm('an') возвращает:

['an', 'aN', 'An', 'AN']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...