перемножить нужные индексы из двух разных списков
Всем привет!
Задание такое:
Sample Input:
a3b4c2e10b1
Sample Output:
aaabbbbcceeeeeeeeeeb
Мое решение:
user_print = list(map(str, input().split()))
#numb_list = user_print.split()
print(user_print)
alph_list = []
num_list = []
for i in user_print[0]:
if i.isalpha():
alph_list.append(i)
elif i.isdigit():
num_list.append(i)
num_list = list(map(int, num_list))
for a in alph_list:
for j in num_list:
result = a * j
print(result, end="")
Получается 'aaaaaaaaaaabbbbbbbbbbbccccccccccceeeeeeeeeeebbbbbbbbbbb' вместо 'aaabbbbcceeeeeeeeeeb'.
Проблема в том, что не получается умножить букву только на следующее после нее число, она умножается на все числа. Как тут быть?
Ответы (3 шт):
Первое, надо отделить числа, а не цифры.
Делаем так:
- Пробегаемся по всей строке
- Все буквы собираем в список (упорядоченно)
- Инициализирую пустую строку, куда будем складывать цифры и пробелы в случае, если попадается буква
- На выходе будем иметь две переменные: один со списком (буквы) и один со строкой (числа разделенные пробелом)
a = "a3b4c2e10b1"
alph_list = []
num_string = ""
for i in a:
if i.isalpha():
alph_list.append(i)
num_string += " "
else:
num_string += i
print(num_string)
print(alph_list)
# OUT
# 3 4 2 10 1
# ['a', 'b', 'c', 'e', 'b']
Теперь можно сделать из строки с числами список и получать результат умножением каждой буквы на соответствующее число
num_list = num_string.split()
result = []
for n in range(len(alph_list)):
result.append(alph_list[n] * int(num_list[n]))
print(result)
print("".join(result))
# OUT
# ['aaa', 'bbbb', 'cc', 'eeeeeeeeee', 'b']
# aaabbbbcceeeeeeeeeeb
Похожая тема уже была ранее на форуме, но найти что-то не смог. Удобно для подобной замены пользоваться функцией замены в регулярных выражениях. Используете шаблон поиска, для которого добавляете функцию замены, которая преобразует найденный фрагмент.
import re
strng = 'a1b2c3g10'
out = re.sub('(\w)(\d+)', lambda x: x[1]*int(x[2]), strng)
Вывод
abbcccgggggggggg
Такой же алгоритм решения как и у Дмитрия, единственное отличие что я использовал регулярные выражения.
import re
def multipleOutput(a):
nums = re.findall(r'\d+', a)
for num in nums:
a = a.replace(num, "")
a = list(a)
if len(a) != len(nums):
print("Error")
return
output = ""
for idx, char in enumerate(a):
output += char * int(nums[idx])
print(output)
s = input()
multipleOutput(s)