【发布时间】:2015-11-12 03:56:46
【问题描述】:
我有一个字符串
name = "Ben"
我变成了一个列表
word = list(name)
我想用星号替换列表中的字符。我该怎么做?
我尝试使用.replace 函数,但它过于具体,并没有一次更改所有字符。
我需要一个适用于任何字符串的通用解决方案。
【问题讨论】:
我有一个字符串
name = "Ben"
我变成了一个列表
word = list(name)
我想用星号替换列表中的字符。我该怎么做?
我尝试使用.replace 函数,但它过于具体,并没有一次更改所有字符。
我需要一个适用于任何字符串的通用解决方案。
【问题讨论】:
我想用星号替换列表中的字符
相反,创建一个只有星号的新字符串对象,像这样
word = '*' * len(name)
在 Python 中,您可以将一个字符串与一个数字相乘以将相同的字符串连接起来。例如,
>>> '*' * 3
'***'
>>> 'abc' * 3
'abcabcabc'
【讨论】:
您可以通过以下方式将列表中的字符替换为星号:
方法一
for i in range(len(word)):
word[i]='*'
这种方法更适合 IMO,因为没有使用额外的资源,因为列表的元素实际上被星号“替换”。
方法二
word = ['*'] * len(word)
或
word = list('*' * len(word))
在此方法中,创建一个相同长度(仅包含星号)的新列表并将其分配给“单词”。
【讨论】:
我想用星号替换列表中的字符。我怎样才能 这样做?
我会从字面上回答这个问题。有时您可能必须将其作为单个步骤执行,尤其是在表达式中使用它时
您可以利用 str.translate 方法并使用 256 大小的转换表将所有字符屏蔽为星号
>>> name = "Ben"
>>> name.translate("*"*256)
'***'
注意因为字符串是不可变的,它会在改变原来的字符串的内部创建一个新的字符串。
【讨论】:
您可能正在寻找类似的东西?
def blankout(instr, r='*', s=1, e=-1):
if '@' in instr:
# Handle E-Mail addresses
a = instr.split('@')
if e == 0:
e = len(instr)
return instr.replace(a[0][s:e], r * (len(a[0][s:e])))
if e == 0:
e = len(instr)
return instr.replace(instr[s:e], r * len(instr[s:e]))
【讨论】: