从字符串中删除重复的字符

时间:2019-06-28 12:17:43

标签: python string

网上有很多方法可以做到这一点,我想做的就是将字符串切成薄片并将其串联起来,留下重复的字符。它只是在某些情况下无法运行,例如,如果重复项不止一个,它只会删除它。我不明白如何使我的内部循环再次为相同的索引运行,以检查其他重复项。我知道这不是最好的解决方案,但我只是想知道我们是否可以使此逻辑起作用。

s = input()
l = len(s)
for i in range(0, l-1):
    for j in range(i+1, l - 1):
        if s[i] == s[j]:
            s = s[:j] + s[j+1:]
print(s)
  

示例输入:hello

     

输出:您好

     

预期输出:helo

6 个答案:

答案 0 :(得分:3)

尝试一下:

str_ = input()
from collections import OrderedDict
str_ = ''.join(list(OrderedDict.fromkeys(str_)))

答案 1 :(得分:1)

如果只需要连续重复的字符,请尝试以下操作:

def remove_duplicates(s): 
    final = "" 
    for char in s: 
         if len(final): 
             if char == final[-1]: 
                 continue 
         final += char 
    return final

如果只需要唯一字符:

def remove_duplicates(s): 
    final = "" 
    for char in s: 
         if char in final: 
             continue 
         final += char 
    return final

或其他答案也很简洁。

答案 2 :(得分:1)

解决此问题的一种方法是使用groupby中的itertools

from itertools import groupby
a = 'helllo'
# convert into a list where every element represents a character in your string
b = [x for x in a]
print(b)
# ['h', 'e', 'l', 'l', 'l', 'o']

# group by a value within list comprehension
c = [x[0] for x in groupby(b)]
print(c)
# ['h', 'e', 'l', 'o']

# turn into string again
d = ''.join(c)
print(d)
# helo

这适用于多个连续的重复项,如我的示例所示,但也可以连续插入多个重复项(如“ hello”中所述)。有关更多信息,请参见itertools上的documentation

答案 3 :(得分:0)

另一种方法:保持顺序(duplicate ?)

删除重复项
def remove_duplicates_with_order(seq):
    seen = set()
    seen_add = seen.add
    return "".join([x for x in seq if not (x in seen or seen_add(x))])

print(remove_duplicates_with_order("hello"))
# helo

答案 4 :(得分:0)

在修改字符串时,我不知道是否可以保留嵌套循环,因此Map可能会超出字符串的长度。

我对您的代码做了一些更改,但这是我想到的:

memory allocation of 320000000000 bytes failedAborted (core dumped)

我使用了一个新字符串j,它没有切分,但我认为您的想法在那里。

答案 5 :(得分:0)

解决方案

s = "helllo"
l = len(s)
i=0
j=0
while (i<l-1):
    j=i+1
    while (j<l):
        if s[i] == s[j]:
          s = s[:j] + s[j+1:]
          l=len(s)
          j=j-1
        j=j+1
    i=i+1

print(s)

代码中的问题是,当您使用s = s[:j] + s[j+1:]时,会更改字符串的len,但不会正确更新i和j的值