我有一个代码块,它应该删除索引可被3整除的字符串中的每个字母:
s = input()
len = len(s)
for i in range(0, len):
if i % 3 == 0:
s = s.replace(s[i], ' ')
s = s.replace(' ', '')
print(s)
例如,字符串“Python”按预期生成“yton”。我已经用十几个输出正确的字符串测试过了,除了一个奇怪的例子:
字符串“Hello”生成“eo”而不是“elo”。仔细检查后,python正在删除双重出现,例如“ll”。为什么会这样?你知道吗
调用
s.replace
就是在整个字符串s
上调用replace,它替换所有出现的s[i]
,除非向replace()
传递第三个参数以限制替换发生的次数。你知道吗试试这个代替:
我认为您也可以跳过使用replace,更精确地更改一个字符,将
if
下的代码更改为:这是因为
replace
方法用替换字符串替换字符串的每一次出现。当替换l
时,Hello
的第三个字符,它也用''
替换另一个l
。你知道吗这就是^{} 所做的:
实际上,您在
replace(' ', '')
调用中完全依赖于这种行为。你知道吗当你不想这样做时,不要使用
replace
。(事实上,几乎所有使用s.replace(s[i], …)
的都有这个问题,所以当你发现自己在写这个的时候要小心。)例如,可以仅使用切片:
或者,也许更好,只需建立一个字符列表,然后
join
将它们放在末尾:…甚至可以浓缩成一行:
如果您真的不允许使用
join
,那么您可以使用同样的逻辑,但效率和习惯性都不如字符串串联:或者,只是为了好玩,把所有的复杂性放在范围和切片中,这样你甚至不需要
%
:相关问题 更多 >
编程相关推荐