Python 中替换方法的不同结果
Differect Result with Replace method in Python
上下文:
我正在编写一个程序来查找字符串中的第一个非重复字母。
测试代码
我需要实现以下逻辑:
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)
输出: i
预期输出: t
为什么它会以这种方式运行,我尝试了很多次,但它在第一个(测试)代码中的工作方式与它应该的一样,当我将它实现到程序中时,它的运行方式有所不同。
您可以对 Python 中的字符串使用函数计数,如下所示:
def non_rep(s):
for char in s:
if s.count(char) == 1:
return char
以下使用 while
来实现您的想法:
def non_rep(s):
while s: # while s is non-empty
el = s[0] # get the first character
if el in s[1:]: # if the character is found in another place
s = s.replace(el, '') # remove all of them
else: # if not repeated
return s[0] # return that
return 'No such case is matched' # this is reached when depleted
print(non_rep("adiiiityda")) # t
print(non_rep("aabbcc")) # No such case is matched
一般建议不要删除for
循环中的项目。如果将 print(el, s)
紧跟在 for el in s:
之后,您就会看到发生了什么。您会发现 el
紧跟在 原始 字符串 adiiiityda
之后。所以在第四次迭代时,el
是 'i'
而 s
是 'ty'
。您的代码无法在 'ty'
中找到此 'i'
,因此它 returns 'i'
,这不是您想要的。
您应该注意字符串是不可变的,因此您不能在循环中更改它,它不会按照您想要的方式运行:
def non_rep(s):
for el in s:
if el in s[1:]:
s = s.replace(el,'')
if len(s)>0:
return s[0]
return "No such case is matched"
str = "adiiiityda"
ch = non_rep(str)
print(ch)
您可以使用 collections.Counter
获取计数,然后仅保留唯一值:
from collections import Counter
s = "iiiiiiitya"
c = Counter(s)
''.join([i for i in c if c[i]==1])
输出:tya
上下文: 我正在编写一个程序来查找字符串中的第一个非重复字母。
测试代码 我需要实现以下逻辑:
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)
输出: i
预期输出: t
为什么它会以这种方式运行,我尝试了很多次,但它在第一个(测试)代码中的工作方式与它应该的一样,当我将它实现到程序中时,它的运行方式有所不同。
您可以对 Python 中的字符串使用函数计数,如下所示:
def non_rep(s):
for char in s:
if s.count(char) == 1:
return char
以下使用 while
来实现您的想法:
def non_rep(s):
while s: # while s is non-empty
el = s[0] # get the first character
if el in s[1:]: # if the character is found in another place
s = s.replace(el, '') # remove all of them
else: # if not repeated
return s[0] # return that
return 'No such case is matched' # this is reached when depleted
print(non_rep("adiiiityda")) # t
print(non_rep("aabbcc")) # No such case is matched
一般建议不要删除for
循环中的项目。如果将 print(el, s)
紧跟在 for el in s:
之后,您就会看到发生了什么。您会发现 el
紧跟在 原始 字符串 adiiiityda
之后。所以在第四次迭代时,el
是 'i'
而 s
是 'ty'
。您的代码无法在 'ty'
中找到此 'i'
,因此它 returns 'i'
,这不是您想要的。
您应该注意字符串是不可变的,因此您不能在循环中更改它,它不会按照您想要的方式运行:
def non_rep(s):
for el in s:
if el in s[1:]:
s = s.replace(el,'')
if len(s)>0:
return s[0]
return "No such case is matched"
str = "adiiiityda"
ch = non_rep(str)
print(ch)
您可以使用 collections.Counter
获取计数,然后仅保留唯一值:
from collections import Counter
s = "iiiiiiitya"
c = Counter(s)
''.join([i for i in c if c[i]==1])
输出:tya