2016-04-11 3 views
-3

Arbeitscode:Warum funktioniert die Verwendung von Bereich mit dieser Funktion, aber die Verwendung des Listennamens nicht?

def censor(text, word): 
    words_split = text.split() 
    for a in range(len(words_split)): 
     if words_split[a] == word: 
      words_split[a] = "".join("*" * len(word)) 
    return " ".join(words_split) 

Dieses zensiert das Wort in einem String Problem Code:

def censor(text, word): 
    words_split = text.split() 
    for a in words_split: 
     if words_split[a] == word: 
      words_split[a] = "".join("*" * len(word)) 
    return " ".join(words_split) 

Die zweite gibt mir den Fehler: „-Liste Indizes ganze Zahlen sein müssen, nicht str " Wie bekomme ich den 2. Code ähnlich wie der erste

+0

ein Listenelement in der zweiten Methode enthalten, wohingegen ein Element-Index (ganze Zahl) in dem ersten Verfahren enthalten. . –

+0

also benutze einfach 'if a == word:' in der zweiten. –

+2

Lesen Sie die Dokumentation !!!!!!!!!!!!!!!!!!!!!!!!!!!! –

Antwort

1

Weil, wie in the documentation for for erklärt, diese beiden Arten von Schleifen verschiedene Dinge tun.

for a in words_split geben Sie die Werte a in words_split, so a ist bereits ein Wert String und words_split[a] ist nicht vorhanden.

Iterieren mit dem Angebot gibt Ihnen die Indizes in words_split, so dass Sie passieren diejenigen words_split[] die Werte zu erhalten.

0

in der ersten a ist der Index des Elements, in der zweiten ein A das Element selbst

l = ['a', 'b', 'c'] 

Index:

for i in range(len(l)): 
    print i 

ergibt:

0 
1 
2 

Element:

for element in l: 
    print element 

ergibt:

a 
b 
c 
Verwandte Themen