Не выводится третий символ
Задача следующая:
На входе вводится строка из букв, следующим вводим число, которое будет означать длину последовательности, чьи варианты будут искаться в строке.
Нужно вывести все варианты в виде списка. Например, если введём
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 шт):
При сокращении строки внутри цикла с помощью 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)
Готовый консольный скрипт (сохранить в файл 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']