2014-08-29 171 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):