我能找到字符串中某个特定字符的相邻重复项吗?

2024-09-29 21:28:59 发布

您现在位置:Python中文网/ 问答频道 /正文

如何在字符串中找到特定字符的相邻重复项?然后删除一些复制,但不是全部。在

假设我有:

`str= "KKKKKLLLLLLLLLLLLLLLOOOPPPPLLL"`

我唯一感兴趣的重复字母是L。我想减少L相邻重复->;如果L是一行15个相邻重复的一部分,我希望它丢失5个相邻重复。如果它在一行3中,我希望它丢失1L

最终输出应为:

KKKKKLLLLLLLLLLOOOPPPPLL

抱歉,如果这没什么意义,希望你能理解我的意思。任何帮助都将不胜感激!!在

编辑:它不会总是减少三分之一,或相同的分数。在

最后澄清说明。我的最后游戏:会有一个随机生成的字符串,长度为几百。复制的长度将决定它需要减少多少,即减半或少于一半。因此,一条50'L'的线需要减少<;=25。一行64减去<;=32。但不能减少0。这对


Tags: 字符串ltgt游戏编辑字母字符分数
2条回答
original="KKKKKLLLLLLLLLLLLLLLOOOPPPPLLL"
expected="KKKKKLLLLLLLLLLOOOPPPPLL"
original=original.replace("LLL","LL")
print(len(expected))        #24
print(len(original))        #24
print(original==expected)   #True

新建编辑:

^{pr2}$

新编辑2:根据@wwii

from itertools import groupby as gb
s="KKKKKLLLLLLLLLLLLLLLOOOPPPPLLL"
s="".join("".join(k)*(len(list(g))*2//3) if k=='L' else "".join(g) for k,g in gb(s))

新编辑3:

from itertools import groupby as gb
s1="KKKKKLLLLLLLLLLLLLLLOOOPPPPLLL"
s=""
for k,g in gb(s1):
    if k=='L': 
        s+="".join(k)*(len(list(g))*2//3) 
    else:  
        s+="".join(g)
print(s)
  • 使用itertools.groupby将字符串分组为连续的重复项并在其上迭代
  • 列一个小组的名单
  • 如果组的键是'L',则获取列表的长度并除以3,使用这个数字来分割列表
  • 将列表添加到result容器
  • 将容器转换为字符串

相关问题 更多 >

    热门问题