Данная строка "lion" должна получить следующий вывод подстрок, [«ion», «lin», «in», «io», «li», «on», «лев»]
Это то, что у меня есть до сих пор,
def Substring(n):
sub = [n]
if len(n) > 2:
sub.extend(Substring(n[1:]))
sub.extend(Substring(n[:-1]))
return list(sub)
мой текущий вывод: ['lion', 'ion', 'on', 'io', 'lio', 'io', 'li']
Мне не хватает подстрок «lin» и «in», и мне не должно быть «lio».
Я не мог понять, нужен ли мне другой метод или мне нужны дополнительные инструкции?
Почему в выводе нет «lon»? А как насчет «lo» и «ln»?
lion не имеет подстроки lin, in или lon. Это не подстрока, это комбинация
Я написал ответ, предполагая, что это были просто «все возможные подстроки», не прочитав достаточно внимательно ... ваше задание выяснить, каков фактический алгоритм, или вы просто не предоставили нам полный текст задания?
Назначение - написать функцию, которая принимает строковый аргумент и возвращает подстроки. «lo» не учитывается, так как нет пути подслов от lion к lo.
Если это так, оба ответа верны (я восстановил свой), и в вашем вопросе есть хотя бы одна проблема. Ваш пример правильного вывода не должен содержать «lin» или «in», поскольку они не являются подстроками «lion». Вы также должны прояснить, что рекурсия является обязательным требованием.
Для этого есть однострочный файл, который не требует itertools
. В зависимости от того, к чему вы привыкли, он может быть более или менее разборчивым.
tuple(s[i:i+j+1] for i in range(len(s)) for j in range(len(s)-i))
# ('l', 'li', 'lio', 'lion', 'i', 'io', 'ion', 'o', 'on', 'n')
Обратите внимание, что отливка tuple
предназначена только для печати; без него Python предоставит вам генератор, который будет намного эффективнее, если вы будете его повторять.
Для подстрок длиной 2 и более:
tuple(s[i:i+j+1] for i in range(len(s)) for j in range(1, len(s)-i))
# ('li', 'lio', 'lion', 'io', 'ion', 'on')
Почему
lio
недействителен?