2014-08-29 1005 views
0

为了执行这个代码,它基本上从句子中删除了一个单词,我们必须使用split.string来访问单词。如何遍历字符串数组Python

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 word in text: 
    for elem in word: 
     if elem==word: 
      word='*'*len(word) """etc""" 
+1

因为没有分裂,'在text'字分配'word'到'text'中的每个*字符*。大概你想删除整个单词,而不仅仅是那个字中出现的任何字符。但为什么问这里;为什么不试试看看会发生什么? – jonrsharpe 2014-08-29 07:45:07

回答

0

这里有多种问题:

  1. 当我们遍历文本字符串,为什么我们没有得到个别字母的单词? Python的禅说:“应该有一个 - 而且最好只有一个 - 明显的方法来做到这一点。” 一个字符串只是字符串的字符。它可能包含也可能不包含单个单词。迭代字符串的最明显方法是一次一个字符。

  2. 当我们迭代使用“for word in text”并修改“word”时,为什么“text”没有改变? 答案有两个部分: (a)字符串在Python中是不可变的,所以无论何时修改字符串,都会得到一个新字符串,而原始字符串保持不变。因此,除了通过将“text”重新分配给新字符串之外,没有办法修改字符串“text”。 (b)即使字符串是可变的,当你遍历迭代时,你只能得到拷贝的元素。所以修改它们对可迭代对象没有影响。 (len(splitstring))“看起来很笨拙。在Python中做到这一点的正确方法是什么?

好的,我提出了这个问题。但答案仍然很重要。在Python的方式来做到这一点是:

for elem in splitstring: 

或者,如果你需要每个元素的索引,那么你这样做:

for index, elem in enumerate(splitstring):