Python longest/average“losing”在字符串中的二进制数字序列中运行

2024-06-12 14:08:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一连串的事情。1是好的,0是坏的。 寻找寻找1序列的最大,最小和平均长度的最python方法。你知道吗

例如:

seq ="001000000000001101001000000000111100001000000011000010000010001100000110011001000010000010101100001110110001000000100100000011000000001000001000101001000000001000010000010011011000100001000011100000001100010001010100100011011000001000000100010110001101100000000100001000001"

Tags: 方法序列事情seq一连串
3条回答

一种方法是将字符串拆分为零、删除空字符串、按长度映射和排序:

wins = sorted(map(len, filter(None, seq.split("0"))))

在此之后,最短的条纹将位于索引0处,最长的条纹将位于最后一个索引处(可通过-1访问),通过应用sum并除以转换为float的长度,可以轻松计算平均值:

print(wins[-1])                     # 4
print(wins[0])                      # 1
print(sum(wins) / float(len(wins))) # 1.4339622641509433

Demo.

不是很像Python,但我会抓住所有的正则表达式如下:

(1{1,})

Demo

然后像这样继续

>>> s=re.findall(r'(1{1,})',a)
>>> length_of_ones=[len(i) for i in s]
>>> max(length_of_ones)
4
>>> min(length_of_ones)
1
>>> sum(length_of_ones)*1.0/len(length_of_ones)
1.4339622641509433

其中a是给定的字符串。你知道吗

您可以使用列表理解和len函数来获取wins长度的列表,但在此之前,您需要使用split方法将字符串拆分为零。你知道吗

seq = "001000000000001101001000000000111100001000000011000010000010001100000110011001000010000010101100001110110001000000100100000011000000001000001000101001000000001000010000010011011000100001000011100000001100010001010100100011011000001000000100010110001101100000000100001000001"
>>> wins_len = [len(el) for el in seq.split('0') if el]
>>> max(wins_len)
4
>>> min(wins_len)
1

计算平均使用sumlen

>>> sum(wins_len) / len(wins_len)
1.4339622641509433

或者来自python3.4中新的statistics模块的^{}函数

>>> from statistics import mean
>>> mean(wins_len)
1.4339622641509433

相关问题 更多 >