我正在尝试计算python中字符串中出现的次数。我想采取二进制输入,说' 001101'。然后计算1s,0s,11s,00s等的数量。
我试图通过使用count来实现这个,但是这将输出有3个1,当我只想输出1 1和1 11s并且它不能单独计算它们,除非它们在他们的自己的。
我也尝试用find实现这个,但我遇到了同样的问题。
任何帮助都将不胜感激,谢谢。
答案 0 :(得分:1)
您可以使用itertools.groupby
和collections.Counter
执行以下操作:
from itertools import groupby
from collections import Counter
s = '001101011'
c = Counter(''.join(g) for _, g in groupby(s))
c.get('11')
# 2
c.get('1')
# 1
c.get('111', 0) # use default value to capture count 0 properly
# 0
这将字符串分组为仅由相等字符组成的子字符串,并对这些子字符串执行计数。
答案 1 :(得分:0)
你可以用正则表达式解决这个问题:
>>> import re
>>> s='001101'
单身:
>>> sum(1 for _ in re.finditer('(?<!1)1(?!1)', s))
1
成对:
>>> sum(1 for _ in re.finditer('(?<!1)11(?!1)', s))
1
并且相同的方法适用于零组。
答案 2 :(得分:0)
通用解决方案,如果您不想指定要查找的字符序列。
def count_unique_chars(string):
char_count = {}
char = ''
for pair in zip(list(string), list(string[1:]) + [None]):
char += pair[0]
if pair[0] == pair[1]:
continue
else:
if char in char_count.keys():
char_count[char] += 1
else:
char_count[char] = 1
char = ''
return char_count
输出带有唯一字符数的字典。
count_unique_chars('001101')
{'0':1,'00':1,'1':1,'11':1}
或
count_unique_chars('001101011000100111101000')
{'0':3,'00':2,'000':2,'1':3,'11':2,'1111':1}
count_unique_chars('hello world')
{'':1,'d':1,'e':1,'h':1,'l':1,'ll':1,'o':2,'r':1 ,'w':1}