Здравствуйте, коллеги-стакеры.
Я столкнулся с проблемой, которую, надеюсь, вы поможете решить.
Я написал два фрагмента кода, которые хочу объединить. В основном при вводе числовой строки я хочу перебирать каждый символ в строке. Символы анализируются условным оператором и преобразуются в другой символ, например. цифры преобразованы в буквы, по сути я пытаюсь создать кодировщик. Кроме того, мне нужна гибкость для кодирования чисел разными символами, например. число ноль на A или B, и я хочу сравнить выходные списки, чтобы я мог переставить все возможные комбинации.
Пример:
Вход 01 - от 0 до А* - от 0 до В* - от 1 до *С
Выходы переменный ток До нашей эры
До сих пор я пробовал несколько комбинаций, и я думаю, что я слишком усложняю вещи.
Это первое приложение выполняет итерацию по списку слов и, если оператор содержит числа. Нерелевантные номера «упаковываются» звездочкой для использования на следующем этапе обработки.
import re
wordlist = ["012"]
for i in range(0, 2):
if i == 0:
dictionary = ['A', 'B']
for symbol in dictionary:
for x in range(0, 1):
zero = re.sub("0", symbol, wordlist[x])
zero = re.sub("[1-9]", "*", zero)
wordlist.append(zero)
elif i == 1:
dictionary = ['C']
for symbol in dictionary:
one = re.sub("1", symbol, wordlist[x])
one = re.sub("[02-9]", "*", one)
wordlist.append(one)
del wordlist[0]
print(wordlist)
Второе приложение объединяет два слова вместе:
wordone = "A****"
wordtwo = "*B***"
# wordthree = "**C**"
union = []
for charA, charB in zip(wordone, wordtwo):
enumerate(charA)
asciicharA = ord(charA)
enumerate(charB)
asciicharB = ord(charB)
if (asciicharA ^ asciicharB != 0):
if (chr(asciicharA) == "*"):
union.append(chr(asciicharB))
elif (chr(asciicharB) == "*"):
union.append(chr(asciicharA))
elif (charA and charB == "*"):
union.append(charA or charB)
print(union)
Я не могу понять, как объединить два приложения вместе. Я считаю, что мне нужно создать выходные данные первого приложения в отдельные строки для последующей обработки во втором приложении, однако я думаю, что может быть гораздо эффективный способ получения требуемых результатов.
Кроме того, я считаю, что в «библиотеке itertools» есть функция перестановки, которую я могу использовать для получения результатов, которые мне нужны во втором приложении.






Вы ищете itertools.product в сочетании с распаковкой списка:
from itertools import product
# map every possible combination here
substitutes = {'0': ['A', 'B'], '1': 'C', '2': ['D', 'E', 'F']}
# the actual input
input = '012'
raw = [substitutes[char] for char in input]
for c in product(*raw):
print(c)
Что дает
('A', 'C', 'D')
('A', 'C', 'E')
('A', 'C', 'F')
('B', 'C', 'D')
('B', 'C', 'E')
('B', 'C', 'F')
@Manifesto: Пожалуйста. Действительно взгляните на itertools, они мощные.
Вау совершенно фантастика! спасибо, что ответили на мой вопрос простым и отличным кодом!