使用循环在python中用字符串替换方法

时间:2013-03-29 21:00:34

标签: python replace

我有以下代码:

secretWord = 'hello'
letter = 'l'
tag = '_ '*len(secretWord) # tag = '_ _ _ _ _'

for m in rage(len(secretWord)):
    if letter == secretWord[m] and m == 0:
         tag.replace(tag[m],letter)
    else:
         tag.replace(tag[m+2],letter)

我想要的输出是tag = '_ _ l l _' 出于某种原因,即使我的逻辑完全准确,我根本无法使其工作。我有一个for循环遍历secretWord中的每个字符,如果letter在那个时候在for循环中等于那个特定字符,用该字母替换tag中的适当位置并保持所有其他空格('_')相同。

2 个答案:

答案 0 :(得分:3)

字符串在Python中是不可变的,您无法修改它们。这就是您的tag未更新的原因。

Python有一个非常奇怪但有用的数据模型。有些类型是可变的(例如列表和字典),有些类型是不可变的(例如字符串和数字)。

字符串实例的replace()函数(实际上所有其他字符串函数)都不能修改字符串。相反,它返回原始字符串的新修改版本。

python和非托管编程语言(如C / C ++)之间的一个更大区别是python变量总是引用值,而C / C ++变量是值的实际存储。

奇怪的是,当从python开始时,这可以在某种程度上被忽略,因为某些算法的语法是相同的。类似的东西:

a = 7
a += 35
s = "Hello"
s += " World"

在Python和C / C ++中产生a = 42s = "Hello World"。这对于C / C ++来说很明显,但是在python中会发生一些完全不明显的事情。

在python中s首先引用字符串"Hello"(不是:s包含字符串"Hello")。然后将字符串Hello和字符串World连接起来,然后重置引用s以指向新字符串"Hello World"

接下来就是a = b总是意味着:复制引用。它永远不会复制该值。对于字符串和整数,它在实践中没有太大的区别,但对于更复杂的类型,它确实如此。但现在这可能超过了这个问题。

答案 1 :(得分:1)

tag成为已知或空白字符的列表。 在需要时使用' '.join(tag)制作显示的表格。


secretWord = 'hello'
letter = 'l'

tag = ['_']*len(secretWord)
tag = [(letter if m == letter else t) for m, t in zip(secretWord, tag)]

print(' '.join(tag))
# _ _ l l _

以下是一些解释此解决方案中使用的工具的链接:

  • [expr for variable in iterable]list comprehension
  • letter if m == letter else tconditional expression
  • zip用于将secretWord中的字母与中的字母配对 tag
  • ' '.join用于将字母列表合并为一个字母 每个字母之间留有空格的字符串。