>>> [ a[ index : index + length ] for index in range(len(a) - 1) for length in range(2, len(a) - index + 1) ]
['ab', 'abc', 'abcd', 'bc', 'bcd', 'cd']
Если вам нужен список, отсортированный:
>>> sorted([ a[ index : index + length ] for index in range(len(a) - 1) for length in range(2, len(a) - index + 1) ], key = len)
['ab', 'bc', 'cd', 'abc', 'bcd', 'abcd']
Существует что-то серьезно не так с вашим алгоритмом, потому что он должен взять только две петли, чтобы сделать это (один для исходного индекса и один для длины подстроки). Однако я не понимаю, что вы пытались сделать, поэтому я не могу его исправить.
EDIT: Я понимаю - вы копируете символ символов персонажем! Вы случайно программируете на C? = p Вам не нужно делать подобные вещи в Python; это язык более высокого уровня. Если вы нарезаете строку (a[1:3]
), вы получите подстроку, которую вы можете добавить в список или сохранить в другом месте. В приведенном выше примере мы сначала итерации по всем индексам до конца строки (минус один, потому что «d» не является допустимой подстрокой), а затем по всем длинам подстроки, которые будут «соответствовать». Это дает все возможные подстроки; мы можем использовать нотацию списка, чтобы составить список из них очень легко.
Вы не выполняете поисковую систему. – Deleted
Пожалуйста, обсудите свой вопрос. Неясно, какой должен быть результат. –
Это больше похоже на механизм перестановки или подпоследовательности ... или нечто иное, чем «поиск». – FrustratedWithFormsDesigner