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
'IT박스' 카테고리의 다른 글
find 메서드에서 Mongoose 결과를 반환하는 방법은 무엇입니까? (0) | 2021.01.07 |
---|---|
스크래피 단위 테스트 (0) | 2021.01.07 |
여러 인수에 대한 cmd.exe의 올바른 인용 (0) | 2021.01.07 |
구조체 조각! = 구현하는 인터페이스 조각? (0) | 2021.01.07 |
인터페이스가없는 클래스를 어떻게 모의합니까? (0) | 2021.01.07 |