Разделите список на более мелкие списки, где каждый меньший список впоследствии будет меньше, используя понимание списка - PullRequest
0 голосов
/ 10 октября 2018

У меня есть список, который я хотел бы разделить на список списков, чтобы каждый список в новом списке был на один элемент меньше.

Например:

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]]

Есть ли простой способ сделать это через понимание списка?

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Перейти с решением @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]]
0 голосов
/ 10 октября 2018

Вы можете использовать нарезку и понимание списка.

>>> [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.

...