【发布时间】:2021-10-13 05:56:33
【问题描述】:
背景: 我正在编写一个程序来查找字符串中的第一个非重复字母。
测试代码 我需要实现以下逻辑:
s = "iiiiiiitya"
if 'i' in s:
s = s.replace('i','')
print(s)
输出: tya
这很好。 它会从字符串中删除所有出现的“i”。这就是我想要的。
问题: 但是,一旦我开始在我的实际程序中实现相同的逻辑,该函数就不能正常工作,即它只删除第一次出现的 perticulare 字母,因此我的逻辑失败。
def non_rep(s):
for el in s:
if el in s[1:]:
s = s.replace(el,'')
else:
return el
return "No such case is matched"
str = "adiiiityda"
ch = non_rep(str)
print(ch)
输出:我
预期输出: t
为什么它会这样,我尝试了很多,但它的工作方式就像在第一个(测试)代码中一样,当我将它实现到程序中时,它的行为会有所不同。
【问题讨论】:
-
这段代码应该做什么?它会在迭代字符串时修改字符串,从而导致意外行为。还有为什么
s[1:]? -
预期的输入和输出是什么?
-
您不应遍历字符并在每一步对整个字符串应用转换。这是非常低效的(您为长度为 n 的字符串读取 n^2 个字符)。而是先计算字符,然后按顺序列出唯一的字符(请参阅here)
标签: python methods replace logic