5

整数のリストがあり、すべての連続する整数のリストを含むリストを生成したいと思います。

#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がこれを行うための効率的な方法であることを示唆する他の質問を見てきましたが、私はその関数に精通しておらず、連続性を記述するラムダ関数を書くのに問題があるようです。

質問:これを行うためのより良い方法はありますか(おそらくitertools.groupbyを使用しますか?)

考慮事項:full_listの整数は1〜59で、常にソートされ、整数は0〜59になります。

4

1 に答える 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]]
于 2013-03-07T16:17:17.087 に答える