asyaevloeva
@asyaevloeva

Как сделать перестановки с заменой в python?

Допустим у меня есть строка 'ABC'
и мне нужно получить такое:
'ABC',2 --> 'AB-', 'A-C', '-BC'
В общем, чтобы отсутствующее значение заменялось на -
Пока получается просто так:
combinations('ABC', 2) --> AB AC BC
  • Вопрос задан
  • 525 просмотров
Решения вопроса 2
LaRN
@LaRN
Senior Developer
Как то так, но тут циклы есть:

import itertools as it

def comb(base_str, num):
comb_list = list(it.combinations(base_str, num))
result = []

for tmp_list in comb_list:
ind_base = 0
ind_comb = 0
full_list = []

while ind_comb < tmp_list.__len__():
while ind_base < base_str.__len__():
if ind_comb < tmp_list.__len__() and base_str[ind_base] == tmp_list[ind_comb]:
full_list.append(base_str[ind_base])
ind_base += 1
ind_comb += 1
else:
full_list.append('-')
ind_base += 1

result.append(full_list)
return result

print(comb('ABCDE', 3))

Результат:
[['A', 'B', 'C', '-', '-'], ['A', 'B', '-', 'D', '-'], ['A', 'B', '-', '-', 'E'], ['A', '-', 'C', 'D', '-'], ['A', '-', 'C', '-', 'E'], ['A', '-', '-', 'D', 'E'], ['-', 'B', 'C', 'D', '-'], ['-', 'B', 'C', '-', 'E'], ['-', 'B', '-', 'D', 'E'], ['-', '-', 'C', 'D', 'E']]
Ответ написан
@javedimka
Хочу сока
def my_comb(pattern, r):
    comb_list = combinations(pattern, r)
    for c in comb_list:
        yield ''.join(x if x in c else '-' for x in pattern)

>>> list(my_comb('ABC', 2))
['AB-', 'A-C', '-BC']
>>> list(my_comb('ABCDE', 3))
['ABC--', 'AB-D-', 'AB--E', 'A-CD-', 'A-C-E', 'A--DE', '-BCD-', '-BC-E', '-B-DE', '--CDE']
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
cronk
@cronk
Делаю графику для кино. Роботы, взрывы, пиу-пиу!
string = "ABC"
for s in string[::-1]:
    print(string.replace(s, "-"))

Результат
AB-
A-C
-BC
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
OnederX Москва
от 100 000 до 120 000 ₽
SwapZilla.co Москва
от 200 000 ₽
NatsON Москва
от 220 000 до 350 000 ₽
15 авг. 2020, в 05:42
50000 руб./за проект
15 авг. 2020, в 05:23
5000 руб./за проект
15 авг. 2020, в 04:49
5000 руб./за проект