2013-10-07 4 views
4

내가카운트

aa = 'booked#booked#available#available#available#available#available#booked#available#booked' 

가 지금은 'available' 문자열이 몇 번 반복이 문자열에서 발생하는이 사실을 찾으려는이 같은 문자열이 있다고 가정 문자열에서 문자열의 선두로부터 반복. 그래서이 경우 5가``available '이 5 번 반복적으로 나오기 때문에 누군가가 파이썬 라이브러리 함수 자체를 제공 할 수 있다면 많은 도움이 될 것입니다. regex 솔루션도 환영합니다. 내가 지금까지 시도 것을

은 분명히 나에게 6을주고있다

aa.count('#available') 

, 다시 잘못

aa.count('#available#available') 

입니다.

import re 
count(re.findall('available#')) 

는 itertools 이러한 유형의 문제에 대한 훌륭에서도

+0

단지 반복을 계산 하시겠습니까? 그래서 첫번째 인스턴스를 제외한 모든 인스턴스? – arturomp

+0

OP는 인접한 항목을 계산하려고합니다. – BartoszKP

답변

14

Groupby 잘못 :

from itertools import groupby 
aa = 'booked#booked#available#available#available#available#available#booked#available#booked' 
words = aa.split('#') 
for key, group in groupby(words): 
    print len(list(group)), key 

출력 :

여기
2 booked 
5 available 
1 booked 
1 available 
1 booked 
+0

끝내 주셔서 고마워요. –

1

내가 2.7에서했던 방법이다.

import re 
aa = 'booked#booked#available#available#available#available#available#booked#available#booked' 
len(re.findall('#available', aa)) 

당신이 제공 한 패턴에 따라 파운드 기호를 안전하게 제거 할 수 있다고 생각합니다.

>>> stuff = re.findall('available', aa) 
>>> stuff 
['available', 'available', 'available', 'available', 'available', 'available']