Python最长/平均'丢失'以字符串中的二进制数字序列运行

时间:2016-03-26 09:32:11

标签: python algorithm python-3.x

我有一系列事件。 1是好的,0是坏的。 寻找找到1个序列的最大,最小和平均长度的最Pythonic方法。

例如:

seq ="001000000000001101001000000000111100001000000011000010000010001100000110011001000010000010101100001110110001000000100100000011000000001000001000101001000000001000010000010011011000100001000011100000001100010001010100100011011000001000000100010110001101100000000100001000001"

3 个答案:

答案 0 :(得分:2)

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

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

之后,您的最短连线将在零指数处,最长的连线将位于最后一个指数(可通过-1访问)并且通过应用sum并除以长度可以轻松计算平均值转换为float

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

Demo.

答案 1 :(得分:1)

您可以使用列表推导和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

或来自Python 3.4中新增的mean模块的statistics函数

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

答案 2 :(得分:0)

不是非常Pythonic,但我会抓住所有正则表达式的那些:

(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是你给定的字符串。