如何在python 2.7中打印1的最大连续出现次数?

时间:2017-02-17 03:21:43

标签: python regex python-2.7 binary

任务是从用户获取整数输入,将其转换为二进制并在二进制表示中打印最多连续出现的1。

这是我的代码:

import re
x = int(raw_input())
y = bin(x)[2:]
print "Binary of", x, "is =",y
count = 0
for i in re.findall('11', y):
    count =+ 1
print "Nb of consecutive 1's =",  count

我输入13,这是我得到的输出:

Binary of 13 is = 1101
Nb os consecutive 1's = 1

我应该得到Nb的连续1 = 2。

我做错了什么?

3 个答案:

答案 0 :(得分:2)

你应该这样做:

get_num_ones = re.findall(r"1+", y)
print "Maximum Nb of consecutive 1's =", len(max(get_num_ones, key=len))

我在这里做的是获取二进制字符串中所有可能的连续字符,然后我选择长度最长的字符串。

答案 1 :(得分:2)

您可以split()零上的字符串,max()生成的子字符串列表只包含' 111':

#!python3

number = 32956415
bits = bin(number)[2:] # bits = '1111101101101111111111111'
                       #        '....5..2..2.............13'

print(bits)
runs_of_ones = bits.split('0')
longest_run = len(max(runs_of_ones, key=len))

print("Longest run is %d ones." % longest_run)

答案 2 :(得分:1)

强制性onChange功能性一线。

groupby

使用groupby将字符串分割为具有相同值的字符,因为它没有排序,对于相邻字符的非相邻集合,将存在多个组。然后from itertools import groupby print(max(map(lambda g: len(list(g[1])), filter(lambda a: a[0] == '1', groupby('1111101101101111111111111'))))) 输出不是filter组的任何组,并将值映射到分组字符的长度,最后使用1获取这些长度中的最大长度。

在我看来,并非所有这些都是可读的,但仍然很有趣。

如果分成几行,可以实现为

max