Python替换函数输出不同的结果
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python替换函数输出不同的结果相关的知识,希望对你有一定的参考价值。
s="|0000011111111|"
print s.replace(s[9:12],' ')
...输出是|00000 11|
s="|0000012345678|"
print s.replace(s[9:12],' ')
...输出是|00000123 78|
我只想将s[9:12]
替换为三个空格,为什么第一个输出不正确?
str.replace()
将替换您传入的所有字符串作为第一个参数。这里的第一个参数是从切片创建的并不重要,str.replace()
方法没有给出关于该字符串来自何处的任何信息。相反,str.replace()
方法从位置0开始并向前搜索,在输入字符串中找到子字符串的位置无关紧要。
所以你真的只是这样做:
string_to_replace = s[9:12]
s.replace(string_to_replace, ' ')
甚至只是
s.replace('111', ' ')
这些都具有完全相同的效果。
你的第二个例子只有用,因为s[9:12]
字符串值在s
中是唯一的;在恰当的位置只需要替换一次。
因为s[9:12]
是字符串'111'
,所以你要求Python用空格替换s
中该字符串的所有出现,并且有两个这样的序列要替换。
你明确切片输入字符串要好得多:
s = s[:9] + ' ' + s[12:]
这将获取要替换的部分之前的所有文本以及之后的所有文本,并在这两个子字符串之间放置三个空格。
在第一种情况下,s[9:12]
是'111'
。您的代码用三个空格替换'111'
的每个非重叠实例。
如果你调用s.replace(s[9:12], ' ')
,那么Python不会将其解释为“将索引9处的字符替换为带有空字符的索引12”。它首先评估s[9:12]
到'111'
。然后它将开始用空格替换三个组,无论在哪里找到它们。
如果要替换特定索引处的字符,可以使用:
print s[:9] + ' ' + s[12:]
这里我们取字符串直到(没有)索引9,然后是三个空格,接着是从索引12开始的字符。
请注意,如果原始字符串不包含12个或更多字符,我们仍会为其添加三个空格。
str.replace(old, new[, count])
返回字符串的副本,其中所有出现的substring old都替换为new。如果给出可选参数计数,则仅替换第一次计数。
因此replace()
不会替换某个位置,它会替换所有出现的字符串中的子字符串。
- 在你的第一个例子中,
s[9:12]
等于111
,所以这个子串的所有出现都被替换了。 - 在你的第二个“工作”例子中,你很幸运,因为
s[9:12]
等于456
,因为在s
的s[9:12]
中只有一次出现这个子串,所以它被正确替换。
以上是关于Python替换函数输出不同的结果的主要内容,如果未能解决你的问题,请参考以下文章