#python #string
#питон #строка
Вопрос:
Есть 2 входных данных
- Строка длиной N.
- Целое число k, удовлетворяющее условию: N % k = 0
Например :
«AABCAAADA»
3
В этом случае мне нужно разделить строку на (9/3) 3 части, а затем мне нужно удалить дубликаты.
объяснение -> вы можете посмотреть демонстрацию здесь.
Я написал код, который делает именно то, что нужно, однако в конце моего раздела вывода я вижу «None». Я не мог понять, откуда это взялось..
Вот мой код:
s = "AABCAAADA"
k = 3
def merge_the_tools(string, k):
ls = segment(string,k)
for l in ls:
print(remove_repetitive(l))
def remove_repetitive(string):
temp = list(dict.fromkeys(string))
return "".join(temp)
def segment(string,k):
ls = []
segment_len = int(len(string) / k)
x = 0
for i in range(segment_len):
ls.append(string[x:x k])
x = k
return ls
print(merge_the_tools(s,k))
И это мой вывод:
AB
CA
AD
None
Комментарии:
1.
merge_the_tools
возвращаетNone
, и вы печатаете его выходные данные, просто вызовите метод без2. ну, это действительно сработало, спасибо 🙂
Ответ №1:
k = 3
new = [s[((x 1)*3)-3:(x 1)*3] for x in range(k)]
new = list(map(set, new))
print(new)
>>> ({'B', 'A'}, {'C', 'A'}, {'D', 'A'})
Эта строка [((x 1)*3)-3:(x 1)*3]
просто получает следующие три элемента и составляет из них список и добавляет его в общий список.
Эта строка list(map(set, new))
просто удаляет дубликаты из каждого списка.
Комментарии:
1. да, действительно, сначала я сделал это таким образом, но проблема в том, что когда мы устанавливаем его, у нас нет контроля над последовательностью букв. В этом случае выходной результат возвращает неверный ответ. Но в любом случае спасибо.