将字符串中的第i个连续的相同字符分组到列表中

时间:2019-06-20 18:17:35

标签: python string list implementation

我希望输入字符串以所有连续的相同字符都组合在一个列表中的方式分隔。

示例1

str aabbcccdeddgg

输出: ['aa', 'bb', 'ccc', 'd', 'e', 'dd']

所需的输出: ['aa', 'bb', 'ccc', 'd', 'e', 'dd', 'gg']

示例2:

str helloop

输出: ['h', 'e', 'll', 'oo'] 所需的输出: ['h','e','ll','oo','p']

使用以下代码:

s = input()
li = []
temp_li = []
grp = s[0]
for ch in s[1:]:
    if ch== grp[-1]:
        grp+=ch
    else:
        li.append(grp)

        grp = ch
print(li)

注意:程序未显示最后一组相同字符的输出

社区的期望答案:

  • 对上述程序进行修改以显示正确的输出
  • 或更一般的更好的解决方案

2 个答案:

答案 0 :(得分:0)

from itertools import groupby
x = "aabbcccdeddgg"
[''.join(g) for _, g in groupby(x)]

>> ['aa', 'bb', 'ccc', 'd', 'e', 'dd', 'gg']

答案 1 :(得分:0)

您需要将li.append(grp)放在for循环之外,以包括最后匹配的组:

for ch in s[1:]:
  if ch== grp[-1]:
    grp+=ch
  else:
    li.append(grp)
    grp = ch

li.append(grp) #account for last instance of grp

输出(对于s='helloop'):

['l', 'e', 'll', 'oo', 'p']