繁体   English   中英

如何用字符替换字符串的一部分

[英]How to replace part of string with a character

我正在尝试创建一个打印到'n'的代码,并将其余字符替换为“ *”。 到目前为止,这是我的代码”

def replace(s,n):
    return s.replace(s[n:], "*")

但是它输出

    replace("hello", 2)
   'he*'

应该是“他***”

您应将"*"乘以要替换的字符数。 另外,您应该在s[n:]之后添加(len(s)-n)*"*"而不是替换(因为同一字符集可能出现在字符串的多个位置)。 您可以按照以下步骤进行操作:

def replace(s,n):
    return s[:n]+(len(s)-n)*"*"
replace('hello', 2)

此打印'he***'

有两个基本问题。 首先, s.replace将用第二个替换整个第一个参数。 甚至更重要的是, 它会在字符串上找到它的任何地方替换它 因此,请考虑以下示例:

>>> def replace(s,n):
...     return s.replace(s[n:], "*")
...
>>> replace('lalahahalala', 8)
'*haha*'
>>>

相反,您应该采取另一种方法,迭代字符串,如果索引< n则返回该字符串中的字符,否则返回'*'

>>> def replace(s, n):
...     return ''.join(c if i < n else '*' for i,c in enumerate(s))
...
>>> replace("hello", 2)
'he***'
>>> replace('lalahahalala', 8)
'lalahaha****'

这是使用for循环而不是生成器表达式的上述版本:

>>> def replace(s, n):
...     char_list = []
...     for i, c in enumerate(s):
...         if i < n:
...             char_list.append(c)
...         else:
...             char_list.append('*')
...     return ''.join(char_list)
...
>>> replace('hello', 2)
'he***'
>>> replace('lalahahalala', 8)
'lalahaha****'
>>>

replace方法从根本上是有缺陷的,因为replace查找子字符串以替换源字符串中的任何位置,而不是替换某个位置的字符。 即使使用@MiriamFarber的“固定”版本(现在他已对其进行编辑,请查看修订历史记录),您仍会得到错误的输出,例如

replace("chachacha", 6) # returns *********

您想要的是在请求的位置截断字符串,并在其后面附加一个与删除的字符一样多的星号字符串。

def replace(s, n):
    return s[:n] + '*'*(len(s)-n)

您可以将s切片直到n位置,然后使用*运算符将字符串的其余部分连接起来。 您不需要使用replace方法:

def replace(s,n):
    return s[:n] + (len(s)-n)*'*'

输出为:

replace('hello', 2)
'he***'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM