我有以下列表:
l = [False, True, True, False, True, False, False, True, False, False, False, True]
我想将每个True和False序列的长度累积到存储桶中。我需要计算顺序长度= 1的所有True序列,然后顺序长度= 2,顺序长度= 3 ...
该列表的输出可能像:
错误:{1:2, 2:1, 3:1}
正确:{1:3, 2:1}
有人可以帮忙吗?
编辑:解决方案
from collections import defaultdict trues = defaultdict(int) l = [1 if i == True else -1 for i in l] seq = [] for i in series: if i > 0: seq.append(i) else: if len(seq) != 0: trues[len(seq)] += 1 seq = [] if len(seq) != 0: trues[len(seq)] += 1 print(trues) >defaultdict(<class 'int'>, {2: 1, 1: 3})
可以通过itertools.groupby
和Counter
:
l = [False, True, True, False, True, False, False, True, False, False, False, True]
from collections import Counter
import itertools
Counter(sum(1 for item in group)
for head, group in itertools.groupby(l)
if head == True) # => Counter({1: 3, 2: 1})
[groupby
构造具有相等项目的运行,然后通过其头项目对其进行过滤,并获取其每个组生成器的长度,并将其提供给Counter
。