我试图知道一个字符串中仅包含1
和0
的字符串中有多少束'1'。
例如,
对于
1011011
,数字束'1'将为3
,因为束数为1
,11
,11
,0
除外对于
11101110101
,它也将是4
,因为捆绑包是111
,111
,1
,1
。
有没有Pythonic简洁的方法来解决此问题?
答案 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”开头的特殊情况。
享受。