bir dize çalışırSayma ben şöyle bir dize var
>>> from itertools import groupby
>>> from collections import Counter
>>> strs = 'TTHHTHHTHHHHTTHHHTTT'
>>> Counter(k for k, g in groupby(strs))
Counter({'T': 5, 'H': 4})
0123: H
aitbir dize çalışırSayma ben şöyle bir dize var
>>> from itertools import groupby
>>> from collections import Counter
>>> strs = 'TTHHTHHTHHHHTTHHHTTT'
>>> Counter(k for k, g in groupby(strs))
Counter({'T': 5, 'H': 4})
0123: H
aitSen itertools.groupby
ve collections.Counter
bir arada kullanabilirsiniz Bir anahtar dayalıgrupları öğe.
>>> 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'])]
Burada ilk öğe öğeleri gruplandırıldı ve list(g)
ilgili grup olduğu dayanan tuşu (k
) 'dir (öntanımlı anahtar tarafından iterable kendi içinde ürün olduğunu) bu tuşa. Sadece key
bölümüyle ilgilendiğimiz için,'u collections.Counter
'a istediğiniz cevabı almak için geçirebiliriz. Çeşitli için
, bir re
merkezli yaklaşım
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)]
harika bir, piton GroupBy SQL biri, teşekkür, 1 den farklı çalıştığını bilmiyordum. Yazık ki iş yerinde python ile çalışmak için zamanım yok :( –