IT박스

Python의 문자열에서 하위 문자열이 몇 번 발생하는지 확인

itboxs 2021. 1. 7. 07:47
반응형

Python의 문자열에서 하위 문자열이 몇 번 발생하는지 확인


문자열에서 문자열이 몇 번 발생하는지 알아 내려고합니다. 예를 들면 :

nStr = '000123000123'

내가 찾고자하는 문자열이 123이라고하자. 분명히 nStr에서 두 번 발생하지만이 논리를 Python으로 구현하는 데 문제가 있습니다. 내가 지금 가지고있는 것 :

pattern = '123'
count = a = 0
while pattern in nStr[a:]:
    a = nStr[a:].find(pattern)+1
    count += 1
return count

반환해야 할 답은 2입니다. 나는 지금 무한 루프에 갇혀 있습니다.

나는 카운트가 훨씬 더 나은 방법이라는 것을 알고 있었지만 호기심으로 인해 내가 이미 얻은 것과 비슷한 방법을 보는 사람이 있습니까?


사용 str.count:

>>> nStr = '000123000123'
>>> nStr.count('123')
2

코드의 작동 버전 :

nStr = '000123000123'
pattern = '123'
count =0
flag=True
start=0
while flag:
    a = nStr.find(pattern,start)  # find() returns -1 if the word is not found, 
                                  #start i the starting index from the search starts(default value is 0)
    if a==-1:          #if pattern not found set flag to False
        flag=False
    else:               # if word is found increase count and set starting index to a+1
        count+=1        
        start=a+1
print(count)

count()여기에 표시된 및 이러한 메서드 의 문제 는 하위 문자열이 겹치는 경우입니다.

예 : "aaaaaa".count("aaa")2를 반환합니다.

4 [ (aaa)aaa, a(aaa)aa, aa(aaa)a, aaa(aaa)] 를 반환 하려면 다음과 같이 시도 할 수 있습니다.

def my_count(string, substring):
    string_size = len(string)
    substring_size = len(substring)
    count = 0
    for i in xrange(0,string_size-substring_size+1):
        if string[i:i+substring_size] == substring:
            count+=1
    return count

my_count("aaaaaa", "aaa")
# 4

더 나은 방법이 있는지는 모르지만 count()작동 방식을 명확히하기 위해 게시 합니다.


import re

pattern = '123'

n =re.findall(pattern, string)

하위 문자열 'pattern'이 'string'에서 len (n) 번 나타난다 고 말할 수 있습니다.


중복되는 경우에 대해이 문제를 해결하는 방법을 찾고있는 경우.

s = 'azcbobobegghaklbob'
str = 'bob'
results = 0
sub_len = len(str) 
for i in range(len(s)):
    if s[i:i+sub_len] == str: 
        results += 1
print (results)

다음과 같은 이유로 3이됩니다. [azc (bob) obegghaklbob] [azcbo (bob) egghaklbob] [azcbobobegghakl (bob)]


string.count (substring)은 겹치는 경우 유용하지 않습니다.

내 접근 방식 :

def count_substring(string, sub_string):

    length = len(string)
    counter = 0
    for i in range(length):
        for j in range(length):
            if string[i:j+1] == sub_string:
                counter +=1
    return counter

a각 루프마다 변경되지 않습니다 . 다음을 넣어야합니다.

a += nStr[a:].find(pattern)+1

...대신에:

a = nStr[a:].find(pattern)+1

def count_substring(string, substring):
         c=0
         l=len(sub_string)
         for i in range(len(string)):
                 if string [i:i+l]==sub_string:
                          c=c+1
         return c
string=input().strip()
sub_string=input().strip()

count= count_substring(string,sub_string)
print(count)

@ João Pesce와 @gaurav가 언급했듯이 count()부분 문자열이 겹치는 경우 유용하지 않습니다.

def count_substring(string, sub_string):
    c=0
    for i in range(len(string)):
        if(string[i:i+len(sub_string)]==sub_string):
            c = c+1
    return c

나는 꽤 새롭지 만 이것이 좋은 해결책이라고 생각합니까? 아마도?

def count_substring(str, sub_str):
    count = 0
    for i, c in enumerate(str):
        if sub_str == str[i:i+2]:
            count += 1
    return count

def countOccurance(str,pat):
    count=0
    wordList=str.split()
    for word in wordList:
        if pat in word:
            count+=1
    return count

ReferenceURL : https://stackoverflow.com/questions/11476713/determining-how-many-times-a-substring-occurs-in-a-string-in-python

반응형