Python,字符串

时间:2017-11-14 13:14:26

标签: python count find

我正在尝试计算python中字符串中出现的次数。我想采取二进制输入,说' 001101'。然后计算1s,0s,11s,00s等的数量。

我试图通过使用count来实现这个,但是这将输出有3个1,当我只想输出1 1和1 11s并且它不能单独计算它们,除非它们在他们的自己的。

我也尝试用find实现这个,但我遇到了同样的问题。

任何帮助都将不胜感激,谢谢。

3 个答案:

答案 0 :(得分:1)

您可以使用itertools.groupbycollections.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}