gpt4 book ai didi

python - 统计连续节点出现的长度和连续出现的次数

转载 作者:行者123 更新时间:2023-11-28 22:26:33 24 4
gpt4 key购买 nike

我有一个列表 r = [1,2,3,None,None,4,None,5] 我想知道 None 出现的次数和长度。这应该给我:

  • [2, 1] 和 2

我写了下面的代码:

#!/usr/bin/env python
def compute_stats():
r = [1,2,3,None,None,4,None,5]
length = []
counter = 0
i = 0
while i < len(r):
if r[i] == None:
j = i
l = 0
while j < len(r) and r[j] == None:
l += 1
j += 1

length.append(l)
counter+= 1
i = j + 1
else:
i += 1
print str(r) +" length: " + str(length) +" counter " + str(counter)



if __name__ == "__main__":
compute_stats()

作为输出,我得到以下内容

 [1, 2, 3, None, None, 4, None, 5] length: [2, 1] counter 2

代码运行良好。但是在 python 中有更漂亮的方法吗?

最佳答案

使用 itertools.groupby() object对连续的 None 值进行分组,并计算组长度:

[sum(1 for _ in g) for k, g in groupby(input) if k is None]

因为 g 是一个未知长度的迭代器,我使用了 sum() 来避免将它具体化到一个列表中;否则可能会占用大量内存。如果您 100% 确定连续的 None 对象组很小(最多几百个),则可能仅使用 len(list( g)) 代替。

groupby() 的默认行为是生成一组相同的对象,因此 测试的连续对象为真。这非常适合 None 值。对于每个组,生成一个k 和一个依赖迭代器,其中k 设置为公共(public)组对象;如果 kNone,您知道手头有一系列连续的 None 对象。

关于python - 统计连续节点出现的长度和连续出现的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44702001/

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