2013-09-06 3 views

답변

20

당신은 itertools.groupbycollections.Counter의 조합을 사용할 수 있습니다 키에 기초그룹 항목.

>>> from pprint import pprint 
>>> pprint([(k, list(g)) for k, g in groupby(strs)]) 
[('T', ['T', 'T']), 
('H', ['H', 'H']), 
('T', ['T']), 
('H', ['H', 'H']), 
('T', ['T']), 
('H', ['H', 'H', 'H', 'H']), 
('T', ['T', 'T']), 
('H', ['H', 'H', 'H']), 
('T', ['T', 'T', 'T'])] 

여기서 첫 번째 항목은 항목 그룹화하고 list(g)가 관련된 그룹 인에 기초하여 키 (k)는 (기본 키로는 반복 가능한 자체의 항목 인) 그 열쇠. key 부분에만 관심이 있으니 kcollections.Counter으로 전달하여 원하는 답을 얻을 수 있습니다. 다양한

+1

큰 하나는, 파이썬 GROUPBY는 SQL 하나, 감사, 하나에서 다른 작동하는지 몰랐어요. 파이썬으로 일할 시간이 없다는 것이 유감입니다. ( –

2

, re 기반 접근 방식

import re 
letters = ['H', 'T'] 
matches = re.findall(r'({})\1*'.format('|'.join(letters)), 'TTHHTHHZTHHHHTTHHHTTT')  
print matches 
['T', 'H', 'T', 'H', 'T', 'H', 'T', 'H', 'T'] 
[(letter, matches.count(letter)) for letter in letters] 
[('H', 4), ('T', 5)] 
관련 문제