Я предполагаю, что вы можете импортировать Python пакетов. Поэтому взгляните на itertools.product
:
Этот инструмент вычисляет декартово произведение входных итераций.
Например, product (A, B) возвращает то же, что и (( x, y) вместо x в A для y в B).
Это похоже на то, что вы ищете, верно? Это все возможные комбинации из двух разных списков.
Поскольку вы новичок в Python, я предполагаю, что вы не знаете, что такое map
. Нет ничего сложного для понимания:
Возвращает список результатов после применения данной функции к каждому элементу заданного итеративного объекта (список, кортеж и т. Д. c.)
Это просто! Итак, первый параметр - это функция, которую вы хотите применить, а второй - ваша итерация.
Функция, которую я применил на карте, выглядит следующим образом:
''.join
Таким образом вы устанавливаете ' 'в качестве вашего разделителя (в основном, без разделителя) и объедините каждый символ с помощью .join.
Зачем вам нужно объединять символы? Что ж, у вас будет список (на самом деле их много), и вам нужна строка, поэтому вам лучше объединить эти символы в каждом списке.
А теперь самое сложное, итерация внутри map:
itertools.product(*((char.upper(), char.lower()) for char in string)
Прежде всего, обратите внимание, что *
- это так называемый оператор splat
в этой ситуации. Он разбивает последовательность на отдельные аргументы для вызова функции.
Теперь, когда вы это знаете, давайте погрузимся в код. Ваши (A, B) для itertools.product (A, B) теперь (char.upper (), char.lower ()). Это обе версии char
, в верхнем и нижнем регистре. А что такое char
? Это вспомогательная переменная, которая будет принимать значение каждого символа в данной строке, по одному.
Поэтому для ввода 'ab c' char
будет принимать значения a, b и c в то время как в l oop, но поскольку вы запрашиваете все возможные комбинации прописных и строчных char
, вы получите именно то, что просили.
Надеюсь, я все прояснил . :)
Дайте мне знать, если вам нужны дополнительные пояснения в комментариях. Вот рабочая функция, основанная на моем предыдущем объяснении:
import itertools
def func():
string = input("Introduce some characters: ")
output = map(''.join, itertools.product(*((char.upper(), char.lower()) for char in string)))
print(list(output))
В качестве дополнительного примечания, если вы напечатали output
, вы не получите желаемый результат, вам нужно превратить тип карты в список для для печати.