2017-06-05 4 views
0

Ich möchte entfernen, um Duplikate in meiner Liste zu ignorieren. Angenommen, die Funktion sucht nach Wörtern, die mit einem ''. '' Enden und fügt sie in eine Liste ein. Ich möchte sicherstellen, dass doppelte Wörter nicht in die Liste aufgenommen werden. HierEntfernen eines Elements aus einer Liste

ist das, was ich bisher

def endwords(sent): 
    list = [] 
    words = sent.split() 
    for word in words: 
     if "." in word: 
      list.append(word) 
     # bottom if statment does not work for some reason. thats the one i am trying to fix  
     if (word == list): 
      list.remove(word) 
    return list  

Bitte beachten Sie, ich bin mit Python 3.

+0

Sie vermeiden sollten Namen von Einbauten für Ihre Objekte (wie 'list',' dict', 'str', usw.) mit –

Antwort

2

Wie über Sie prüfen, ob das Wort bereits in der Liste enthalten ist, bevor es anhängt, etwa so:

def endwords(sent): 
    wordList = [] 
    words = sent.split() 
    for word in words: 
     if "." in word and word not in wordList: 
      wordList.append(word) 
    return wordList 

Sie versuchen zu überprüfen, ob word == list, aber das ist sehen, ob das Wort gleich der gesamten Liste ist. Um zu überprüfen, ob sich ein Element in einem Container in Python befindet, können Sie das Schlüsselwort in verwenden. Um zu überprüfen, ob sich etwas nicht in einem Container befindet, können Sie alternativ verwenden.

Eine andere Möglichkeit ist, einen Satz zu verwenden:

def endwords(sent): 
    wordSet = set() 
    words = sent.split() 
    for word in words: 
     if "." in word: 
      wordSet.add(word) 
    return wordSet 

Und die Dinge ein wenig sauberer zu machen, hier ist eine Version eingestellt Verständnis mit:

def endwords(sent): 
    return {word for word in sent.split() if '.' in word} 

Wenn Sie aus einer Liste erhalten möchten von dieser Funktion können Sie das folgendermaßen tun:

Da Sie in Ihrer Frage gesagt haben, möchten Sie überprüfen, ob t er Wort endet mit einem, werden Sie wahrscheinlich auch die endswith() Funktion wie so verwendet werden soll ‚‘:

def endwords(sent): 
    return list({word for word in sent.split() if word.endswith('.')}) 
0

Sie können eine Probe beurteil für die Frage.

def endwords(sent): 
    list = [] 
    words = sent.split() 
    for word in words: 
     if "." in word: 
      if word not in list: 
       list.append(word) 
     # bottom if statment does not work for some reason. thats the one i am trying to fix 

    return list 
0

Warum nicht ein Set verwenden?

def endwords(sent): 
    my_list = set() 
    words = sent.split() 
    for word in words: 
     if "." in word: 
      my_list.add(word) 
    return my_list 
0

Je weniger ausführliche Art und Weise, es zu tun würde Liste Verständnis verwenden, das heißt

my_list = [word for word in words if '.' in word] 

und die Elemente, um sicherzustellen, nicht dupliziert werden, nur set verwenden.

my_list = set(my_list) # No more duplicated values 
2

Nach Aussage

list = [] 

Sie können nicht eingebaut in list class verwenden und zu verstehen, dass Sie etwa eine Stunde verbringen oder so, das ist, warum wir Namen von Einbauten für unsere Objekte vermeiden .

Mehr unter this answer.


Funktion prüft, ob Wörter, die mit einem '' enden.‚‘

Statement

"." in word 

prüft, ob word Punktsymbol enthält (zB "." in "sample.text" wird in Ordnung arbeiten, während es einfach nicht mit Punkt endet), wenn Sie müssen prüfen, ob es mit dem Punkt endet - Verwenden Sie str.endswith Methode.


Ich möchte sicherstellen, dass doppelte Wörter in der Liste nicht gehen.

nur sicherstellen, bevor Sie eine speichern, die nicht bereits gespeichert wurde.


Endlich können wir schreiben

def endwords(sent, end='.'): 
    unique_words = [] 
    words = sent.split() 
    for word in words: 
     if word.endswith(end) and word not in unique_words: 
      unique_words.append(word) 
    return unique_words 

-Test

>>>sent = ' '.join(['some.', 'oth.er'] * 10) 
>>>unique_words = endwords(sent) 
>>>unique_words 
['some.'] 

PS

Wenn Reihenfolge keine Rolle spielt - verwenden set, wird es kümmern Duplikate nehmen (funktioniert nur mit abwaschbaren Typen, str ist waschbar):

def endwords(sent, end='.'): 
    unique_words = set() 
    words = sent.split() 
    for word in words: 
     if word.endswith(end) and word not in unique_words: 
      unique_words.add(word) 
    return unique_words 

oder mit Set Verständnis

def endwords(sent, end='.'): 
    words = sent.split() 
    return {word for word in words if word.endswith(end)} 
Verwandte Themen