我如何找出 Python3 中的字符串中有多少个“1”bundle



我试图知道一个字符串中有多少个"1"的捆绑,它只包含 1 s 和 0 s。

例如

对于1011011,"1"的数丛将被3,因为丛是11111,除了0 s。

对于11101110101,它也将是4的,因为丛是11111111

有没有一个Pythonic和简洁的方法来解决这个问题?

很容易。

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

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


print(len(bundles))输出:
4

这是你是如何做到的。将字符串拆分为 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))
您可以使用

itertools.groupby并使用'0'作为拆分字符:

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

它不是特别漂亮,但它有效。

仅包含 1 和 0 的字符串

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

方法(键入(是这样的:

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"开头的极端情况。

享受。

最新更新