通过codeacademy for python,一个任务是编写一个函数,该函数将接受一个字符串,并使用星号删除某个单词,然后返回该字符串。我尝试了一种方式,它没有工作,但我尝试了另一种方式,它做到了。我只是好奇为什么。
那个没有工作的人:
def censor(text, word):
split_string = text.split()
replace_string = "*" * len(word)
for i in split_string:
if i == word:
i = replace_string
return " ".join(split_string)
工作的那个:
def censor(text, word):
split_string = text.split()
replace_string = "*" * len(word)
for i in range(0, len(split_string)):
if split_string[i] == word:
split_string[i] = replace_string
return " ".join(split_string)
答案 0 :(得分:1)
以下语句使i
引用replace_string
引用的值,并且它不会影响列表项。
i = replace_string
>>> lst = [1, 2, 3]
>>> i = lst[0]
>>> i = 9
>>> i # affects `i`
9
>>> lst # but does not affect the list.
[1, 2, 3]
while,lst[<number>] = replace_string
更改了列表项。
>>> lst[0] = 9
>>> lst
[9, 2, 3]
答案 1 :(得分:1)
def censor(text, word):
split_string = text.split()
replace_string = "*" * len(word)
for i in split_string:
if i == word:
i = replace_string # This doesn't work*
return " ".join(split_string)
这不起作用,因为您所做的就是将名称i
分配给另一个字符串。相反,您可以构建一个新列表,或者像在第二个示例中那样替换原始列表中的字符串。