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