Для этого есть однострочник, который не требует 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')