我如何找出Python3中的String中有多少束“ 1”?

时间:2019-02-07 11:40:55

标签: python python-3.x string

我试图知道一个字符串中仅包含10的字符串中有多少束'1'。

  

例如,

     

对于1011011,数字束'1'将为3,因为束数为111110除外

     

对于11101110101,它也将是4,因为捆绑包是11111111

有没有Pythonic简洁的方法来解决此问题?

5 个答案:

答案 0 :(得分:2)

这很容易。

import re
string = "11101110101"
bundles = re.findall(r'1+',string)

使用贪婪搜索来搜索1's的最长序列。现在,re.findall贪婪地搜索整个字符串,并返回一个列表。此列表将包含所有出现的1,其中包含1的组。 如果要打印包的总数,请使用以下方法:

print(len(bundles))
输出:
4

答案 1 :(得分:1)

这是您的操作方式。 将字符串除以0,然后从返回的列表中删除空元素,然后打印列表的长度

string = '0000'
x = string.split('0')
while "" in x:
    x.remove('')
print(len(x))

另一种方法是使用循环理解来删除空。

string = '0000'
x = string.split('0')
x = [y for y in x if y != ""]
print(len(x))

答案 2 :(得分:0)

您可以使用itertools.groupby并使用'0'作为分隔符:

>>> from itertools import groupby

>>> s = '11101110101'
>>> sum(1 for k, g in groupby(s, '0'.__eq__) if not k)
4

它不是特别漂亮,但是可以。

答案 3 :(得分:0)

仅包含1和0的字符串

s = raw_input("Enter: ")
print(len([i for i in s.split("0") if i!=""]))

答案 4 :(得分:-1)

最简单的输入方法是:

s = "11101110101"
print( zip("0"+s,s).count( ('0','1') ) )

解释它为什么起作用有点复杂,但是总体来说是良好的编程习惯。每一个1束都以子串“ 01”开头,但字符串以“ 1”开头的情况除外。如果仅计算这些成对的相邻字符,则可以准确计算出捆绑。

将字符串偏移量设置为一个,将一个字符串压缩会得到所有成对的字符,例如

>>> s="111001101011"
>>> print( zip(s,s[1:]) )
[('1', '1'), ('1', '1'), ('1', '0'), ('0', '0'), ('0', '1'), ('1', '1'), ('1', '0'), ('0', '1'), ('1', '0'), ('0', '1'), ('1', '1')]

剩下要做的就是通过在开头添加一个额外的“ 0”来修复可能以“ 1”开头的特殊情况。

享受。

相关问题