Python替换函数输出不同的结果

时间:2018-01-15 21:53:22

标签: python string python-2.7 replace

s="|0000011111111|"
print s.replace(s[9:12],'   ')

...输出为|00000 11|

s="|0000012345678|"
print s.replace(s[9:12],'   ')

...输出为|00000123 78|

我只想将s[9:12]替换为三个空格,为什么第一个输出不正确?

4 个答案:

答案 0 :(得分:6)

在第一种情况下s[9:12]'111'。您的代码用三个空格替换 '111'的每个非重叠实例。

答案 1 :(得分:6)

TaskCompletionSource<T>将替换您传入的字符串的所有次出现作为第一个参数。这里的第一个参数是从切片创建的并不重要,str.replace()方法没有给出关于该字符串来自何处的任何信息。相反,str.replace()方法从位置0开始并向前搜索,在输入字符串中找到子字符串的位置并不重要。

所以你真的只是这样做:

str.replace()

甚至只是

string_to_replace = s[9:12]
s.replace(string_to_replace, '   ')

这些都具有完全相同的效果。

您的第二个示例仅有效,因为s.replace('111', ' ') 字符串值在s[9:12]中是唯一的;在恰当的位置只需要替换一次。

因为s是字符串s[9:12],所以你要求Python用空格替换'111'中该字符串的所有出现,并且有两个这样的序列要替换。

明确切片输入字符串会好得多:

s

之前的所有文本之后的所有文本放在之前,并在这两个子字符串之间放置三个空格。

答案 2 :(得分:3)

如果你致电s.replace(s[9:12], ' '),那么Python 将其解释为&#34; 将索引9处的字符替换为带有空字符的索引12 &# 34 ;.它首先评估s[9:12]'111'。然后它将开始用空格替换三个组,无论在哪里找到它们。

如果要替换特定索引处的字符,可以使用:

print s[:9] + '   ' + s[12:]

这里我们把字符串直到(没有)索引9,然后是三个空格,接着是从索引12开始的字符。

请注意,如果原始字符串不包含12个或更多字符,我们仍会为其添加三个空格。

答案 3 :(得分:2)

根据Python documentation

  

str.replace(old, new[, count])

     

返回字符串的副本,其中所有出现的substring old都替换为new。如果给出了可选参数count,则只替换第一次计数。

因此replace()不会将 替换为 一个位置,它会替换 在字符串中找到的所有子字符串 由另一个给定的字符串。

  • 在您的第一个示例中,s[9:12]等于111,因此会替换此子字符串的所有匹配项。

  • 在您的第二个&#34;工作&#34; 示例中,您很幸运,因为s[9:12]等于456,因为有s s[9:12] // Method for identifying ingredient with lowest inventory. void OrderNext() { double ingredient1 = amount1 // doubles are needed as ingredients are used as fragments. double ingredient2 = amount2 double ingredient3 = amount3 double ingredient4 = amount4 List<double> ingredientAmounts = new List<double> //puts doubles into a list for sorting. { ingredient 1, ingredient 2, ingredient 3, ingredient 4 }; double orderValue= ingredientAmounts.Min(); //This gets the ingredient with the lowest level string orderId = ??? // this is where I get lost. } for i in range(0, 3): if a[i] in b: if a[i] == b[i]: strikes = strikes + 1 else: balls = balls + 1 只发生一次此子字符串,它被正确替换。