python 从列表中返回连续整数的列表
我有一个整数列表,想要生成一个包含所有连续整数的列表。
#I have:
full_list = [0,1,2,3,10,11,12,59]
#I want:
continuous_integers = [[0,1,2,3], [10,11,12], [59]]
我现在的方法可以实现这个功能,但感觉不是最好的方式:
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)
我看到其他问题提到使用itertools.groupby是个高效的方法,但我对这个函数不太熟悉,而且在写一个描述连续性的lambda函数时遇到了麻烦。
问题是:有没有更好的方法来实现这个(可能用itertools.groupby)?
需要考虑的因素:full_list会有1到59个整数,始终是排序好的,整数范围在0到59之间。
1 个回答
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]]