python返回列表中连续整数的列表

ded*_*ded 5 python lambda group-by continuous python-itertools

我有一个整数列表,我想生成一个包含所有连续整数列表的列表.

#I have:
full_list = [0,1,2,3,10,11,12,59]
#I want:
continuous_integers = [[0,1,2,3], [10,11,12], [59]]
Run Code Online (Sandbox Code Playgroud)

我有以下工作,但似乎是一个糟糕的方式:

sub_list = []
continuous_list = []
for x in full_list:
    if sub_list == []:
        sub_list.append(x)
    elif x-1 in sub_list:
        sub_list.append(x)
    else:
        continuous_list.append(sub_list)
        sub_list = [x]
continuous_list.append(sub_list)
Run Code Online (Sandbox Code Playgroud)

我已经看到其他问题表明itertools.groupby是一种有效的方法,但是我不熟悉这个函数,我似乎在编写lambda函数来描述连续性时遇到了麻烦.

问题:有没有更好的方法(可能使用itertools.groupby?)

注意事项:full_list将包含1到59个整数,将始终排序,整数将介于0到59之间.

Jon*_*nts 10

您可以使用以下配方:

from operator import itemgetter
from itertools import groupby
full_list = [0,1,2,3,10,11,12,59]
cont = [map(itemgetter(1), g) for k, g in groupby(enumerate(full_list), lambda (i,x):i-x)]
# [[0, 1, 2, 3], [10, 11, 12], [59]]
Run Code Online (Sandbox Code Playgroud)

  • 通常当我说某些事情很聪明时,我的意思是批评:"聪明"我的意思是"以一种微妙的方式依赖于问题的非显而易见的特征,而这种特征并不健全或通常有用".然而,这是一个很好的方式. (2认同)