2017-11-13 6 views
0

Dieser Code dient zum Entfernen von Wörtern aus Listen, die mit einem angegebenen Buchstaben beginnen. Das Problem ist, dass es nur einige der Einträge entfernt. Wenn ich es ausführen, um Wörter zu entfernen, die mit 'a' beginnen, werden nur 'ana', 'agra', 'aba' entfernt. Warum? Ist es auch möglich, die Bedingung neu zu schreiben, um eine Reihe von Buchstaben einzuschließen, sagen wir zum Beispiel a-i?python Entfernen von Elementen aus einer Liste

def delete_from_list(): 
    discarded=[] 
    #list_of_terms = pickle.load(open("list_it.txt", "rb")) 
    list_of_terms = ['ana', 'agro','agra',' aaa','aba','bab','Banana', 'band', 'bink' ] 

    print('start length = ', len(list_of_terms)) 

    for item in list_of_terms: 
     item.lower().strip() 
     if item.startswith('a'): 
      discarded.append(item) 
      list_of_terms.remove(item) 
    print('end_length = ', len(list_of_terms)) 
    print(discarded, list_of_terms) 

Vielen Dank für Ihre Zeit und Hilfe.

+0

Komm, ich brauchte weniger als 30 Sekunden, um das Duplikat zu finden – DeepSpace

+0

Wenn du etwas aus einer Liste entfernst, während du es durchläufst, überspringst du einen Gegenstand, anstatt zum nächsten zu gehen. Versuchen Sie, die Elemente innerhalb der for-Schleife zu drucken, Sie untersuchen sie nicht wirklich alle. Verwenden Sie 'Filter' oder ein Listenverständnis, um Aufgaben wie diese zu erledigen –

+0

Danke für die Hilfe. Ich werde das tun. Das wusste ich nicht. Die Zurückhaltung entgeht mir immer wieder, ich fürchte, – user1478335

Antwort

2

Wie DeepSpace und Patrick gesagt haben, durchlaufen Sie die Liste, während Sie Elemente daraus entfernen. Um nach Wörtern zu suchen, die mit a-i beginnen, können Sie versuchen, Regex zu verwenden.

regex=re.compile('^[a-i]') 

if re.match(regex, somestring): 
    # do things 

Das Caret stimmt mit dem Anfang der Zeichenfolge überein, und das a-i in den eckigen Klammern gibt die Zeichenmenge an, die Sie möchten. Weitere Einzelheiten finden Sie unter python docs on regex.

+0

Danke. Ich werde mir das genau ansehen. Ich habe mich nur gefragt, ob es auch möglich ist, startswith() mit mehr als einem Wert zu verwenden, den ich nicht finden konnte. Offensichtlich nicht. Schätze, dass du dir die Zeit nimmst – user1478335

Verwandte Themen