asyaevloeva
@asyaevloeva

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

Допустим у меня есть строка 'ABC'
и мне нужно получить такое:
'ABC',2 --> 'AB-', 'A-C', '-BC'
В общем, чтобы отсутствующее значение заменялось на -
Пока получается просто так:
combinations('ABC', 2) --> AB AC BC
  • Вопрос задан
  • 205 просмотров
Решения вопроса 2
@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
Ответ написан
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы
Popmechanic Москва
от 100 000 до 150 000 руб.
Panda Media Нижний Новгород
от 70 000 руб.
НЛ Континент Новосибирск
от 60 000 до 100 000 руб.
21 авг. 2018, в 16:11
1500 руб./за проект
21 авг. 2018, в 15:45
4000 руб./за проект
21 авг. 2018, в 15:42
2500 руб./за проект