У меня есть список, который я хотел бы разбить на список списков, так что каждый список в новом списке будет на один элемент меньше.
Например:
exampleList = [1,2,3,4,5,6,7,8,9,10]
newList = [[1,2,3,4,5,6,7,8,9,10],
[2,3,4,5,6,7,8,9,10],
[3,4,5,6,7,8,9,10],
[4,5,6,7,8,9,10],
[5,6,7,8,9,10],
[6,7,8,9,10],
[7,8,9,10],
[8,9,10],
[9,10]]
Есть ли простой способ сделать это через понимание списка?
Вы можете использовать нарезку и понимание списка.
>>> [exampleList[i:] for i in range(len(exampleList) - 1)]
[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [2, 3, 4, 5, 6, 7, 8, 9, 10], [3, 4, 5, 6, 7, 8, 9, 10], [4, 5, 6, 7, 8, 9, 10], [5, 6, 7, 8, 9, 10], [6, 7, 8, 9, 10], [7, 8, 9, 10], [8, 9, 10], [9, 10]]
exampleList[i:]
будет принимать все элементы из текущего индекса i
до конца. Если вы хотите включить [10]
в результат, опустите- - 1
из вызова len
.
Пойдите с решением @timgeb, альтернативная версия может быть
res = [lst[i:] for i, _ in enumerate(lst[:-1])]
Другая возможность использования map
res = list(map(lambda x: lst[x-1:], lst[:-1]))
# [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [2, 3, 4, 5, 6, 7, 8, 9, 10], [3, 4, 5, 6, 7, 8, 9, 10], [4, 5, 6, 7, 8, 9, 10], [5, 6, 7, 8, 9, 10], [6, 7, 8, 9, 10], [7, 8, 9, 10], [8, 9, 10], [9, 10]]