为了执行这个基本上从句子中删除单词的代码,我们必须使用split.string来访问单词。
def censor(text, word):
splitstring=text.split()
for elem in range(len(splitstring)):
if splitstring[elem]==word:
splitstring[elem]='*'*len(word)
return " ".join(splitstring)**strong text**
为什么我们不能使用“传统的”for-loop,就像在字母中循环一样?
for word in text:
for elem in word:
if elem==word:
word='*'*len(word) """etc"""
答案 0 :(得分:0)
这里有多个问题:
当我们迭代一串文字时,为什么我们得到的单个字母不是单词? Python的禅宗说“应该有一个 - 最好只有一个 - 明显的方式来做到这一点。” 字符串只是字符的字符串。它可能有也可能没有单独的单词。迭代字符串最明显的方法是一次一个字符。
当我们使用“for text in text”迭代并修改“word”时,为什么“text”不会改变? 答案分为两部分: (a)字符串在Python中是不可变的,因此无论何时修改字符串,都会获得一个新字符串,而原始字符串保持不变。因此,除了通过将“text”重新分配给新字符串之外,无法修改字符串“text”。 (b)即使字符串是可变的,当你迭代一个iterable时,你只能获得元素的副本。因此修改它们对可迭代对象没有影响。
“对于范围内的元素(len(splitstring))”看起来很笨拙。在Python中执行此操作的正确方法是什么?
好的,我提出了这个问题。但答案仍然很重要。 Pythonic的方法是:
for elem in splitstring:
或者,如果您需要每个元素的索引,那么您可以这样做:
for index, elem in enumerate(splitstring):