这里有一个疑问,如果s中有重复的字符,那么替换后,s的长度会变短吗?

这里有一个疑问,如果s中有重复的字符,那么替换后,s的长度会变短吗?因为有for i in s(这里的s应该是固定长度)

s=input().strip()
dic = {char: s.count(char) for char in set(s)}
c=min(dic.values())
for i in s:
  if dic[i]==c:
    s=s.replace(i,'')  # 这里有一个疑问,如果s中有重复的字符,那么替换后,s的长度会变短吗?因为上面有for i in s(这里的s应该是固定长度)
print(s)
阅读 885
2 个回答

先说答案: 会变短,你实际操作就可以看到。

但是这种写法极不推荐,你的这个例子运行起来没啥问题,但是这种写法属于是边遍历边修改,极容易引起不可预知的错误,会给自己埋坑的。

for i in range(len(s)):
    if dic[s[i]]==c:
        s=s.replace(s[i],'')

如果改成这种,就必然会出错。因为你的实际操作其实是会影响到遍历本身的 s 的。

但是你的方式和我的区别在于,你的那个在一开始 s 作为可迭代对象在循环开始前被读取一次,之后使用的是它的迭代器,不再关心后续对 s 的修改,虽然 s 长度发生了变化,但是不影响迭代次数。

而我写的这个例子则是,虽然for那块也是一开始就作为迭代器不会变了,但是后续 s[i] 取值就会出现索引越界的问题。

建议: 如果你需要修改原字符串,且得到处理后的结果,最好就是用一个新的变量来储存你的结果。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题