Я не думаю, что есть встроенный для этого; но, вероятно, было бы не так уж сложно написать код вручную - вы просто просматриваете все возможные длины от 1 до L.length, а затем берете все подстроки каждой длины.
Возможно, вы могли бы использовать itertools.chain()
, чтобы объединить последовательности для каждой длины подстроки в генератор для всех из них.
Пример:
>>> a = [1,2,3,4]
>>> list(
... itertools.chain(
... *[[a[i:i+q] for q in xrange(1,len(a)-i+1)] for i in xrange(len(a))]
... )
... )
[[1], [1, 2], [1, 2, 3], [1, 2, 3, 4], [2], [2, 3], [2, 3, 4], [3], [3, 4], [4]]
Если вы предпочитаете их в последовательности увеличения длины, а затем и в лексографическом порядке, которую вы описали, вы бы хотели вместо этого:
itertools.chain(*[[a[q:i+q] for q in xrange(len(a)-i+1)] for i in xrange(1,len(a)+1)])