高级别的解决方案包括
分组
相邻元素。有多种方法可以做到这一点。我已经用纯python概述了一个
itertools
,还有一个是熊猫,因为这就是你给这个问题加上的标签。
蟒蛇
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
,对
子句
呼叫-
r = [i for i, _ in groupby(lst)]
熊猫
子句
+
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()
我用过
意思是
,但他们做同样的事情。