Python 将此列表拆分为较小列表的最佳方法?

Python 将此列表拆分为较小列表的最佳方法?,python,list,split,enumerate,Python,List,Split,Enumerate,我一直在努力寻找最好的方法,将这些数字按顺序排列,但又分成若干部分。例: data = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 29, 30, 31, 32, 33, 35, 36, 44, 45, 46, 47] 我希望输出是这样的 sliced_data = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18

我一直在努力寻找最好的方法,将这些数字按顺序排列,但又分成若干部分。例:

data = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 29, 30, 31, 32, 33, 35, 36, 44, 45, 46, 47]
我希望输出是这样的

sliced_data = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19],[29, 30, 31, 32, 33],[35, 36],[44, 45, 46, 47]]
我试了一会儿,直到它是空的,但效果不太好

编辑:

我不明白为什么while循环在这里不起作用,除非你想要更高效或简洁的东西

比如:

slice = [data.pop(0)]
sliced_data = []
while data:
    if data[0] == slice[-1] + 1:
        slice.append(data.pop(0))
    else:
        sliced_data.append(slice)
        slice = [data.pop(0)]
sliced_data.append(slice)
我不明白为什么while循环在这里不起作用,除非你想要更高效或简洁的东西

比如:

slice = [data.pop(0)]
sliced_data = []
while data:
    if data[0] == slice[-1] + 1:
        slice.append(data.pop(0))
    else:
        sliced_data.append(slice)
        slice = [data.pop(0)]
sliced_data.append(slice)

有什么不好用的?它挂在一个环中。我会贴出来的。有什么不好用的?它挂在一个环里。我会贴出来的。这两个答案都非常棒,它帮助我克服了我的错误。为了可读性,我选择tijko的方法。@Matthew,这种方法不能很好地扩展到大型列表,所以如果数据不总是很短,请记住这一点,这两个答案都非常棒,它帮助我克服了我的错误。为了可读性,我选择tijko的方法。@Matthew,这种方法不能很好地扩展到大型列表,所以如果数据不总是很短,请记住这一点
>>> data = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 29, 30, 31, 32, 33, 35, 36, 44, 45, 46, 47]
>>> from itertools import groupby, count
>>> [list(g) for k,g in groupby(data, key=lambda i, c=count():i-next(c))]
[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [29, 30, 31, 32, 33], [35, 36], [44, 45, 46, 47]]