itertools
からハイレベルのソリューションは、グルーピング隣接要素を含むであろう。これを行う方法は複数あります。私はitertools
を使って純粋なpythonで1つを概説しました。それであなたが質問をタグ付けしたので、もう1つはpandasです。
Pythonの
itertools.groupby
from itertools import groupby
r = [tuple(g) for _, g in groupby(lst)]
r
[(1.0, 1.0), (-1.0, -1.0, -1.0, -1.0, -1.0), (1.0,), (-1.0, -1.0, -1.0, -1.0, -1.0), (1.0,), (-1.0, -1.0), (1.0,), (-1.0, -1.0), (1.0,), (-1.0, -1.0, -1.0), (1.0, 1.0, 1.0), (-1.0, -1.0), (1.0,), (-1.0,), (1.0,), (-1.0,), (1.0, 1.0, 1.0, 1.0), (-1.0, -1.0), (1.0, 1.0, 1.0, 1.0, 1.0), (-1.0, -1.0, -1.0, -1.0), (1.0,), (-1.0,), (1.0,), (-1.0,), (1.0,), (-1.0,), (0.0,), (1.0, 1.0), (-1.0,), (1.0,), (-1.0, -1.0, -1.0, -1.0, -1.0, -1.0)]
あなたはgroupby
から一意の値が必要な場合は、groupby
コールにわずかな変更を加える -
r = [i for i, _ in groupby(lst)]
パンダ
groupby
+ shift
+ cumsum
+ apply
x = pd.Series(lst)
r = x.groupby(x.ne(x.shift()).cumsum()).apply(tuple)
r
1 (1.0, 1.0)
2 (-1.0, -1.0, -1.0, -1.0, -1.0)
3 (1.0,)
4 (-1.0, -1.0, -1.0, -1.0, -1.0)
5 (1.0,)
6 (-1.0, -1.0)
7 (1.0,)
8 (-1.0, -1.0)
9 (1.0,)
10 (-1.0, -1.0, -1.0)
11 (1.0, 1.0, 1.0)
12 (-1.0, -1.0)
13 (1.0,)
14 (-1.0,)
15 (1.0,)
16 (-1.0,)
17 (1.0, 1.0, 1.0, 1.0)
18 (-1.0, -1.0)
19 (1.0, 1.0, 1.0, 1.0, 1.0)
20 (-1.0, -1.0, -1.0, -1.0)
21 (1.0,)
22 (-1.0,)
23 (1.0,)
24 (-1.0,)
25 (1.0,)
26 (-1.0,)
27 (0.0,)
28 (1.0, 1.0)
29 (-1.0,)
30 (1.0,)
31 (-1.0, -1.0, -1.0, -1.0, -1.0, -1.0)
dtype: object
一意の値を見つけるには、あなたはmean
やunique
を使用することができます。 -
r = x.groupby(x.ne(x.shift()).cumsum()).mean()
私はmean
を使用しましたが、同じことをしています。
'itertools.groupby(l)]の[tuple(g)の_、gですか? –