按单个字符分组,否则拆分

Tim*_*Tim 4 python python-3.x

我有以下字符串:

"TTTHTHTTHTTTTHTTTHTTTTTTHTTTTTHTH"

我希望能够将T分组到列表中,然后将T的数量计算到第一个H.

即是这样的

[3, 1, 2, 4, 3, 6, 5, 1]

什么是在python中最有效的方法?

Ste*_*ers 8

itertools.groupby 是你的朋友

from itertools import groupby

s = "TTTHTHTTHTTTTHTTTHTTTTTTHTTTTTHTH"

res = [sum(1 for _ in g) for k, g in groupby(s) if k == 'T']
print(res)

# [3, 1, 2, 4, 3, 6, 5, 1]
Run Code Online (Sandbox Code Playgroud)

  • 或者,如果k =='T'],`[sum(1表示为_g)对于k,g表示组合(s).这避免了创建`g`列表,因此它更有效率,并且它避免了为这些临时列表使用RAM.这在这里是无关紧要的,但是当预计这些团体规模庞大时,它会很方便. (2认同)

Ofe*_*dan 5

您可以使用列表解析在一行中执行此操作:

my_string = "TTTHTHTTHTTTTHTTTHTTTTTTHTTTTTHTH"
my_list = [len(i) for i in my_string.split('H') if len(i)>0]
Run Code Online (Sandbox Code Playgroud)

产量my_list:

[3, 1, 2, 4, 3, 6, 5, 1]
Run Code Online (Sandbox Code Playgroud)