如何将列表项分组为不同序列长度的存储桶?

问题描述 投票:-3回答:1

我有以下列表:

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})
python list sequence bucket
1个回答
0
投票

可以通过itertools.groupbyCounter

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

© www.soinside.com 2019 - 2024. All rights reserved.