首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从python中的字符串中删除连续的重复字符

从python中的字符串中删除连续的重复字符
EN

Stack Overflow用户
提问于 2016-11-20 13:52:33
回答 7查看 6.6K关注 0票数 1

嘿,我正在写一个程序,它会从字符串中删除连续的重复字符。

例如:

字符串->aabbccde

第一次迭代: bbccde

第二次迭代: ccde

第三次迭代: de

而德就是答案。

下面是我写的程序。

代码语言:javascript
复制
a = "aabbcs"
def remove_dups(st,ind):
    print st, ind
    st = st.replace(st[ind], "")
    print st, "in dups"
    find_dups(st)

def find_dups(text):
    s=text
    print s, "in find"
    ln = len(s)
    print ln
    fg = 0
    ind = 0
    if ln==1:
        print s, 'len'
        return s
    for i in range(0,ln-1):
        if(s[i]==s[i+1]):
            ind = i
            remove_dups(s,ind)
    print s, 'check'        
    return s

ans = find_dups(a)
print 'answer', ans

下面是我得到的输出

在寻找中

6

aabbcs 0

bbcs在dups中

bbcs在查找

4.

bbcs 0

政务司司长受骗

政务司司长在查找

2

cs检查

bbcs检查

aabbcs 2

dups中的aacs

aacs in find

4.

aacs 0

政务司司长受骗

政务司司长在查找

2

cs检查

aacs检查

aabbcs检查

回答

在这里,我们得到了cs,但仍然是原来的字符串,我可以理解它是因为递归,但无法理解如何解决问题。帮点忙就好了。谢谢!

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2016-11-20 14:03:15

你的线路remove_dups(s,ind)是问题所在。它没有使用返回的值做任何事情。如果您阅读了您的代码,在顶层函数调用中您将在顶部分配s=text,然后在底部返回s,而不会修改s的值。提示是,在打印正确的答案之后,您将在最后打印原始文本。

试试s = remove_dups(s, ind)

票数 1
EN

Stack Overflow用户

发布于 2016-11-20 14:10:03

python有一些更简单的方法可以做到这一点,其中之一是:

代码语言:javascript
复制
>>> dup_string = 'aabcbccde'
>>> from itertools import groupby
>>> ''.join([x for x,y in groupby(dup_string) if sum(1 for i in y)<2])
'bcbde'
>>> dup_string = 'aabbccde'
>>> ''.join([x for x,y in groupby(dup_string) if sum(1 for i in y)<2])
'de'
>>> 
票数 3
EN

Stack Overflow用户

发布于 2016-11-20 14:20:25

如果要递归地调用find_dups方法,那么最好去掉for循环。只要找到连续的副本,然后递归地对新返回的字符串调用find_dups即可。

代码语言:javascript
复制
a = "aabbcs"
def remove_dups(st,ind):
     return st.replace(st[ind:ind+1], "")


def find_dups(text, i):
    if len(text)-1 == i:
        return text
    if(text[i]==text[i+1]):
        text = remove_dups(text,i)
        text = find_dups(text, i)
    else:
        text = find_dups(text, i+1)
    return text

ans = find_dups(a, 0)
print "answer", ans
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40704821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档