2017-03-13 8 views
2

이 코드는 작동하지만 여기에서 게시물을 읽으면 매우 "Pythonic"솔루션이 아닐 것이라고 생각합니다. 이 특정 문제를 해결하기위한보다 효율적인 방법이 있습니까?다른 문자열의 문자열을 계산하는 Python의 더 좋은 방법

이 코드가 수행하는 작업 : 다른 문자열에서 발견 된 한 문자열의 인스턴스를 계산하고 그 개수를 반환합니다. 사용자가 빈 문자열을 전달하려고 시도하면 오류가 발생합니다.

내가 함께하지만이 할 수있는 더 좋은 더 효율적으로 더 "파이썬"방법이 있는지 궁금 와서 코드의 버전 :

def count_string(raw_string, string_to_count): 
    if len(string_to_count) == 0: 
     raise ValueError("The length of string_to_count should not be 0!") 
    else: 
     str_count = 0 
     string_to_count = string_to_count.lower() 
     raw_string = raw_string.lower() 
     if string_to_count not in raw_string: 
      # this causes early exit if string not found at all 
      return str_count 
     else: 
      while raw_string.find(string_to_count) != -1: 
       indx = raw_string.find(string_to_count) 
       str_count += 1 
       raw_string = raw_string[(indx+1): ] 
      return str_count 

이 코드는 파이썬 2.7로 작성되었지만 3에서 작동한다 .엑스.

+5

가능한 중복 (http://stackoverflow.com/questions/11476713/determining-how-many-times-a-substring-occurs- in-a-string-in-python) – languitar

+0

"duplicate"는 유용한 피드백을 포함하고 있습니다.이 글에 직접 나오는 답변은 "duplicate"스레드에서 찾을 수있는 것보다 더 구체적이고 우수한 해결책입니다. 간단히 말해서, 왜 이것이 속는 사람으로 표시 되었는가를 알 수 있지만, 나는 다른 게시물에서 필요한 답을 얻을 수 없었습니다. 나는 여기에서 희망하고있는 대답을 얻고 있으며,이 실로부터 좋은 것을 배우고있다. – TMWP

답변

9

count 메서드를 str으로 사용하지 않는 이유는 무엇입니까?

>>> a = "abcghabchjlababc" 
>>> a.count("abc") 
3 
+0

나는 그것에 대해 몰랐다. 감사. 시도 해보려합니다. 나는 또한 누군가가 추가 한 "복제"깃발 링크에 다른 방법을 본다. 그러나 당신의 것이 더 깔끔하게 보이고 그들의 접근 방식보다 더 짧아 보인다. – TMWP

+1

유일한 차이점은 'len (a) + 1'이 빈 문자열이라는 것입니다. wrapper를 만들어서 수정할 수 있습니다 : def count (a, b) : return len (b) 그리고 a.count (b)'그러면 그 경우 0을 반환합니다. – Uriel

+0

당신의 솔루션이 내가 원하는 것을 해줍니다. 정말 고마워! 내 학습을위한 빠른 질문 ... 길이가 0 인 문자열을 입력으로 계산하는 논리에 대해서는 약간 분명하지 않습니다. 어떻게 작동합니까? – TMWP

2

다른 가능한 해결책입니다.

>>> a= 'almforeachalmwhilealmleandroalmalmalm' 
>>> len(a.split('alm')) - 1 
6 
>>> q = "abcghabchjlababc" 
>>> len(q.split("abc")) - 1 
3 
[문자열 파이썬의 문자열에서 발생하는 횟수를 결정]의
+0

이것은 멋지게 창의적인 솔루션이기도하지만, 코드를 수정 한 후에 작동한다면 문자열 카운트 방법을 사용할 것이라고 생각합니다. 그 접근법은 그것이 무엇인지 더 많이 읽습니다. 이 접근 방식은 다른 문제를 알기에 좋기 때문에 게시하는 데 감사드립니다. – TMWP

+0

나는 궁금해서, 왜 우리는 마지막에 -1을하고 있나 ...... –

+0

'O-O-O' -> bounds (대시)를 제거하라. 당신은'오 오 '를 얻을 것이다. 얼마나 많은 경계가 있었습니까? 반지 수 - 1) -) – marmeladze