以下のリストがあります:
tst = [1,3,4,6,8,22,24,25,26,67,68,70,72]
上記のリストの要素を、リスト内の連続する要素の違い(1または2の違い)に基づいて、別々のグループ/リストにグループ化したい。
連続する要素間の差が4を超える場合、要素は別個のリストを形成する必要があります。
上記の入力から期待される出力は次のとおりです。
[[1, 3, 4, 6, 8], [22, 24, 25, 26], [67, 68, 70, 72]]
私は完璧なアプローチではないと思う次のコードを試しました。
def lsp(litt):
lia = []
for i in range(len(litt)-1):
if len(litt)>=2:
if litt[i+1]-litt[i] >= 4:
lia.append(litt[i])
litti = []
for i in lia:
if i in litt:
litti.append(litt.index(i))
litti.insert(0,0)
littil = []
for i in range(len(litti)-1):
littil.append([litti[i],litti[i+1]])
t1 = []
for i,j in enumerate(littil):
t2 = []
if i==0:
t2.append([j[0], j[1]])
if i!=0:
t2.append([j[0]+1,j[1]])
t1.append(t2)
t1 = [i for j in t1 for i in j]
fl = []
for i,j in t1:
fl.append(litt[i:j+1])
fl.append(litt[t1[-1][1]+1:])
return fl
itertools.groupbyを使用してこれを実現したいのですが、その方法がわかりません。
私はこの方法が好きで、スライスメソッドを定義し、ラムダ述語を渡します。
def slice_when(predicate, iterable):
i, x, size = 0, 0, len(iterable)
while i < size-1:
if predicate(iterable[i], iterable[i+1]):
yield iterable[x:i+1]
x = i + 1
i += 1
yield iterable[x:size]
tst = [1,3,4,6,8,22,24,25,26,67,68,70,72]
slices = slice_when(lambda x,y: y - x > 2, tst)
print(list(slices))
#=> [[1, 3, 4, 6, 8], [22, 24, 25, 26], [67, 68, 70, 72]]
多くの場合に役立ちます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加