gpt4 book ai didi

python - 计算列表中的顺序出现和

转载 作者:太空宇宙 更新时间:2023-11-03 13:54:51 26 4
gpt4 key购买 nike

我有 3 个列表如下:

L1 = ['H', 'H', 'T', 'T', 'T', 'H', 'H', 'H', 'H', 'T']
L2 = ['H', 'H', 'T', 'T', 'T', 'H', 'H', 'H', 'H', 'T' , 'T', 'H, 'T', 'T', 'T', 'H', 'H', 'H', 'T']
L3 = ['H', 'T', 'H', 'H']

我想计算每个列表中“H”的连续出现次数,并生成下表显示这些“H”序列的频率:

Length | L1 | L2 | L3
----------------------
1 0 1 1
2 1 1 1
3 0 1 0
4 1 1 0
5 0 0 0

我知道执行以下操作可以得到列表中序列的频率:

from itertools import groupby
[len(list(g[1])) for g in groupby(L1) if g[0]=='H']
[2, 4]

但我需要一种优雅的方式来进一步处理剩余的列表,并确保为未观察到的长度放置“0”。

最佳答案

您可以使用 collections.Counter 从生成器表达式创建一个频率字典,该表达式输出由 itertools.groupby 生成的序列的长度,然后遍历 code>range 可能长度以从所述字典输出频率,在没有频率的情况下使用 0 作为默认值。

L1为例:

from itertools import groupby
from collections import Counter
counts = Counter(sum(1 for _ in g) for k, g in groupby(L1) if k == 'H')
print([counts[length] for length in range(1, 6)])

这个输出:

[0, 1, 0, 1, 0]

关于python - 计算列表中的顺序出现和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57809568/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com