Старая добрая старомодная двойная петля не элегантна, но будет работать:
Я добавляю в качестве кортежей, чтобы я мог использовать set(...)
для удаления дубликатов.
ls = [1,2,3,1,2,3,4,1,2,3,1,2,3,4]
set([tuple(ls[i:j+1]) for i in range(len(ls)) for j in range(i, len(ls))])
выход
{(1,),
(1, 2),
(1, 2, 3),
(1, 2, 3, 1),
(1, 2, 3, 1, 2),
(1, 2, 3, 1, 2, 3),
(1, 2, 3, 1, 2, 3, 4),
(1, 2, 3, 1, 2, 3, 4, 1),
(1, 2, 3, 1, 2, 3, 4, 1, 2),
(1, 2, 3, 1, 2, 3, 4, 1, 2, 3),
(1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 1),
(1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 1, 2),
(1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 1, 2, 3),
(1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 1, 2, 3, 4),
(1, 2, 3, 4),
(1, 2, 3, 4, 1),
(1, 2, 3, 4, 1, 2),
(1, 2, 3, 4, 1, 2, 3),
(1, 2, 3, 4, 1, 2, 3, 1),
(1, 2, 3, 4, 1, 2, 3, 1, 2),
(1, 2, 3, 4, 1, 2, 3, 1, 2, 3),
(1, 2, 3, 4, 1, 2, 3, 1, 2, 3, 4),
(2,),
(2, 3),
(2, 3, 1),
(2, 3, 1, 2),
(2, 3, 1, 2, 3),
(2, 3, 1, 2, 3, 4),
(2, 3, 1, 2, 3, 4, 1),
(2, 3, 1, 2, 3, 4, 1, 2),
(2, 3, 1, 2, 3, 4, 1, 2, 3),
(2, 3, 1, 2, 3, 4, 1, 2, 3, 1),
(2, 3, 1, 2, 3, 4, 1, 2, 3, 1, 2),
(2, 3, 1, 2, 3, 4, 1, 2, 3, 1, 2, 3),
(2, 3, 1, 2, 3, 4, 1, 2, 3, 1, 2, 3, 4),
(2, 3, 4),
(2, 3, 4, 1),
(2, 3, 4, 1, 2),
(2, 3, 4, 1, 2, 3),
(2, 3, 4, 1, 2, 3, 1),
(2, 3, 4, 1, 2, 3, 1, 2),
(2, 3, 4, 1, 2, 3, 1, 2, 3),
(2, 3, 4, 1, 2, 3, 1, 2, 3, 4),
(3,),
(3, 1),
(3, 1, 2),
(3, 1, 2, 3),
(3, 1, 2, 3, 4),
(3, 1, 2, 3, 4, 1),
(3, 1, 2, 3, 4, 1, 2),
(3, 1, 2, 3, 4, 1, 2, 3),
(3, 1, 2, 3, 4, 1, 2, 3, 1),
(3, 1, 2, 3, 4, 1, 2, 3, 1, 2),
(3, 1, 2, 3, 4, 1, 2, 3, 1, 2, 3),
(3, 1, 2, 3, 4, 1, 2, 3, 1, 2, 3, 4),
(3, 4),
(3, 4, 1),
(3, 4, 1, 2),
(3, 4, 1, 2, 3),
(3, 4, 1, 2, 3, 1),
(3, 4, 1, 2, 3, 1, 2),
(3, 4, 1, 2, 3, 1, 2, 3),
(3, 4, 1, 2, 3, 1, 2, 3, 4),
(4,),
(4, 1),
(4, 1, 2),
(4, 1, 2, 3),
(4, 1, 2, 3, 1),
(4, 1, 2, 3, 1, 2),
(4, 1, 2, 3, 1, 2, 3),
(4, 1, 2, 3, 1, 2, 3, 4)}