Я пытаюсь сегментировать список, а затем удалять дубликаты в соответствии с заданными входными значениями? Однако я чего-то не хватает

#python #string

#питон #строка

Вопрос:

Есть 2 входных данных

  1. Строка длиной N.
  2. Целое число 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 , и вы печатаете его выходные данные, просто вызовите метод без print инструкции.

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. да, действительно, сначала я сделал это таким образом, но проблема в том, что когда мы устанавливаем его, у нас нет контроля над последовательностью букв. В этом случае выходной результат возвращает неверный ответ. Но в любом случае спасибо.