s="|0000011111111|"
print s.replace(s[9:12],' ')
...输出为|00000 11|
s="|0000012345678|"
print s.replace(s[9:12],' ')
...输出为|00000123 78|
我只想将s[9:12]
替换为三个空格,为什么第一个输出不正确?
答案 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)
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
只发生一次此子字符串,它被正确替换。