通过列表理解将列表分成较小的列表,其中每个较小的列表随后会变小

时间:2018-10-10 15:25:31

标签: python python-2.7 split list-comprehension

我有一个列表,希望将其拆分为列表列表,以使新列表中的每个列表小一个元素。

例如:

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 :(得分:5)

您可以使用切片和列表理解。

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

答案 1 :(得分:0)

使用@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]]