我如何将此代码转换为一个衬里或使用列表理解减少行数?

How can I convert this code into one liner or reduce the number of lines using list comprehension?

def consecutive_zeros(input_binary):
  count = 0
  count_list = list()
  for x in input_binary:
    if x == "0":
        count += 1
    else:
        count_list.append(count)
        count = 0
  return max(count_list)

我尝试了不同的方法来实现相同的方法,但出现语法错误或输出错误。 有没有更有效的方法可以实现相同的功能?如何使它成为一个班轮?

您似乎想找到 1 之后最长的 0 序列。如果这是正确的,最后的零不应该被计算在内。我有一个基于字符串操作的解决方案,因为我假设您的输入是一个字符串。如果不是,请考虑在您的问题中添加示例输入。

def consecutive_zeros(input_binary):
    return max(map(len, input_binary.rstrip('0').split('1')))
    
print(consecutive_zeros('0000111110001000000')) # 4
print(consecutive_zeros('00001111100010000001')) # 6

编辑:由于您的函数被命名为 consecutive_zeros,因此您最后可能还需要一个序列,这不会被计入您的代码中。如果你想计算它,你可以使用这个代码:

def consecutive_zeros(input_binary):
    return max(map(len, input_binary.split('1')))
    
print(consecutive_zeros('0000111110001000000')) # 6
print(consecutive_zeros('00001111100010000001')) # 6

根据你问题中的函数,returns 前导 0 的数量,你可以使用这个:

def consecutive_zeros(input_binary):
    return len(input_binary) - len(input_binary.lstrip('0'))