我有一系列事件。 1是好的,0是坏的。 寻找找到1个序列的最大,最小和平均长度的最Pythonic方法。
例如:
seq ="001000000000001101001000000000111100001000000011000010000010001100000110011001000010000010101100001110110001000000100100000011000000001000001000101001000000001000010000010011011000100001000011100000001100010001010100100011011000001000000100010110001101100000000100001000001"
答案 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
答案 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
计算平均使用量sum
和len
>>> 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,})
然后继续这样,
>>> 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是你给定的字符串。