python - 如何将列表项分组到不同序列长度的桶中?
问题描述
我有以下列表:
l = [False, True, True, False, True, False, False, True, False, False, False, True]
我想将每个 True 和 False 序列的长度累积到存储桶中。我需要计算所有序列长度为真的序列= 1,然后序列长度= 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
.
推荐阅读
- keras - tf.keras 嵌入 mask_zero=True 后跟 GlobalAveragePooling1D 生成 TypeError
- adobe-indesign - 如何在 InDesign 中获取 CC 库的数量?
- laravel - 如何在 Laravel 6 中扩展 Laravel 的基础路由资源?
- python - 嵌入具有不同输入维度的预训练 Keras 模型
- javascript - 我需要为 javascript 数组设置默认选项(下拉字段)
- spring-boot - 使用 nginix 控制器将 Spring Boot 应用程序部署到 Kubernetes 集群时,JWT 身份验证不起作用
- ray - 如何获取现有 Ray redis 集群的地址?
- pg-promise - 使用未在 pg-promise 中运行的 null 或空字符串值更新列
- shell - 如何读取链中某个命令的返回码
- arrays - 如何将多个数据从视图发送到操作数据?