Не выводится третий символ

Задача следующая:

На входе вводится строка из букв, следующим вводим число, которое будет означать длину последовательности, чьи варианты будут искаться в строке.

Нужно вывести все варианты в виде списка. Например, если введём AFGTYAFTGAF, а затем ввёдем число 2, то нужно будет ввести все уникальные встречаемые варианты без повторов, точнее: AF, FG, GT, GY и так далее.

У меня следующий код:

seq = input().upper()

k_mer = int(input())

list = []

n = 0

for i in seq:

    seq = seq[n:len(seq)]
    k = seq[0:k_mer]
    if k not in list and k != '':
        list.append(k)
    n += 1

print(list)

Начал с проверки для числа 1 и уже не получается.

Так, при вводе, например, AGTC, код почему-то не видит третью букву Т при числе, но если строку удлинить до AGTCAGTC, только тогда выведет и то в последнюю очередь.

При чём использовать нужно только самые простые функции типа append, find, for.


Ответы (2 шт):

Автор решения: SerhiiKrepets

При сокращении строки внутри цикла с помощью seq = seq[n:len(seq)], строка постоянно укорачивается:

seq = input().upper()
k_mer = int(input())

unique_kmers = []

for n in range(len(seq) - k_mer + 1):
    k = seq[n:n + k_mer]  
    if k not in unique_kmers:  
        unique_kmers.append(k)

print(unique_kmers)
→ Ссылка
Автор решения: Fox Fox

Готовый консольный скрипт (сохранить в файл test.py и запустить):

import os

print("-" * 70 + "\nСписок уникальных комбинаций заданной длины из букв заданной строки:\n" + "-" * 70)

# Функция обработки строки:
def unique_substrings(v_string, v_n):

 ok = True

 if not v_string: print("Не указана строка!"); ok = False

 if ok:
  try: v_string = v_string.strip()
  except Exception as e: print(f"Недопустимое содержимое строки! Подробнее:\n{e}"); ok = False

 if ok:
  try: v_n = abs(int(v_n))
  except Exception as e: print(f"Недопустимое значение длины подстрок! Подробнее:\n{e}"); ok = False

 if ok and (v_n <= 0 or v_n > len(v_string)): print("Недопустимое значение длины подстрок!"); ok = False

 if ok:
  set_substrings = set()
  for i in range(len(v_string) - v_n + 1): set_substrings.add(v_string[i: i + v_n])
  print(f"\nСписок уникальных комбинаций букв по {v_n}:\n", list(set_substrings))

# Пример использования:
v_string = "AFGTYAFTGAF"
v_n = 4
unique_substrings(v_string, v_n)

print("\nНажмите любую клавишу для продолжения...")
os.system("pause > nul" if os.name == "nt" else "read > /dev/null")

Результат:

Список уникальных комбинаций букв по 4:
 ['FGTY', 'AFGT', 'FTGA', 'TYAF', 'TGAF', 'GTYA', 'YAFT', 'AFTG']
→ Ссылка