Satzzeichen aus Python-Liste entfernen

Muhammad Maisam Abbas 30 Januar 2023
  1. Die Konstante string.punctuation in Python
  2. Entfernen Sie Satzzeichen aus einer Liste mit for-Schleifen in Python
  3. Entfernen von Interpunktionszeichen aus einer Liste mit List Comprehensions in Python
  4. Entfernen von Interpunktionszeichen aus einer Liste mit der Funktion str.translate() in Python
Satzzeichen aus Python-Liste entfernen

Dieses Tutorial stellt die String-Konstante string.punctuation vor und diskutiert einige Methoden zum Entfernen von Satzzeichen aus einer Liste von Strings in Python.

Die Konstante string.punctuation in Python

string.punctuation ist ein vorinitialisierter String in Python, der alle Satzzeichen enthält. Um diesen String zu verwenden, müssen wir das Modul string importieren. Die Konstante string.punctuation wird im folgenden Codierungsbeispiel gezeigt.

import string

print(string.punctuation)

Ausgabe:

!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

Wir haben das Modul string importiert und den Wert der Konstanten string.punctuation angezeigt. Die Ausgabe zeigt alle möglichen Satzzeichen in englischer Sprache.

Entfernen Sie Satzzeichen aus einer Liste mit for-Schleifen in Python

Wir können alle Satzzeichen aus einer Liste von Strings entfernen, indem wir die string.punctuation mit for-Schleifen in Python verwenden. Das folgende Codebeispiel veranschaulicht dieses Phänomen.

import string

words = ["hell'o", "Hi,", "bye bye", "good bye", ""]
new_words = []
for word in words:
    for letter in word:
        if letter in string.punctuation:
            word = word.replace(letter, "")
    new_words.append(word)

print(new_words)

Ausgabe:

['hello', 'Hi', 'bye bye', 'good bye', '']

Wir haben eine Liste von Strings words initialisiert, die Satzzeichen enthält. Wir haben dann eine verschachtelte Schleife erstellt, die jedes Zeichen in jeder Zeichenkette der Wörter-Liste durchläuft. Die äußere for-Schleife durchläuft jeden String innerhalb der Liste, und die innere for-Schleife durchläuft jeden Buchstaben dieses Strings. Wir haben dann mit der Anweisung if überprüft, ob dieser letter innerhalb der string.punctuation-Konstante ist. Wenn der Buchstabe in der Konstante string.punctuation vorhanden ist, entfernen wir ihn, indem wir ihn durch einen leeren String ersetzen. Nachdem wir alle Satzzeichen aus einer Zeichenkette entfernt haben, fügen wir diese Zeichenkette in unsere new_words-Liste ein. Am Ende haben wir die Liste new_words gedruckt.

Das einzige Problem bei dieser Implementierung besteht darin, dass leere Zeichenketten in der endgültigen Liste verbleiben können. Abhängig von unseren Anforderungen können wir die leeren Strings auch aus der ursprünglichen Liste entfernen, indem wir einen zusätzlichen Haken in unseren Schleifen platzieren. Der folgende Codeausschnitt zeigt, wie auch leere Zeichenketten aus der Liste entfernt werden.

import string

words = ["hell'o", "Hi,", "bye bye", "good bye", ""]
new_words = []
for word in words:
    if word == "":
        words.remove(word)
    else:
        for letter in word:
            if letter in string.punctuation:
                word = word.replace(letter, "")
        new_words.append(word)
print(new_words)

Ausgabe:

['hello', 'Hi', 'bye bye', 'good bye']

Dieses Mal hat unser Code auch alle leeren Zeichenketten aus der ursprünglichen Zeichenkette entfernt.

Entfernen von Interpunktionszeichen aus einer Liste mit List Comprehensions in Python

Das einzige Problem mit dem vorherigen Ansatz besteht darin, dass er zu viel Code erfordert, um nur Satzzeichen aus einer Liste von Zeichenketten zu entfernen. List Comprehensionse sind eine Möglichkeit, verschiedene Rechenoperationen an Listenelementen durchzuführen. Wir können for-Schleifen und if-Anweisungen innerhalb von List Comprehensions verwenden. Der Hauptvorteil der Verwendung von List Comprehensions besteht darin, dass sie weniger Code benötigen und im Allgemeinen schneller sind als eine einfache for-Schleife. Wir können List Comprehensionse mit der String-Konstante string.punctuation verwenden, um Satzzeichen aus einer Liste von Strings in Python zu entfernen. Das folgende Codebeispiel zeigt uns, wie Sie Satzzeichen aus einer Liste mit List Comprehension entfernen.

import string

words = ["hell'o", "Hi,", "bye bye", "good bye", ""]
words = [
    "".join(letter for letter in word if letter not in string.punctuation)
    for word in words
]
print(words)

Ausgabe:

['hello', 'Hi', 'bye bye', 'good bye', '']

Ich bin ganz ehrlich, es ist ein wenig schwer, den obigen Code zu verstehen, aber er ist überhaupt nicht komplex. Es verwendet einfach ein verschachteltes List Comprehension. Der innere Teil des Codes prüft, ob jeder Buchstabe innerhalb eines einzelnen Wortes in der Konstante string.punctuation vorhanden ist und gibt nur die Buchstaben zurück, die nicht in string.punctuation enthalten sind. Die Funktion str.join(), die diesen Teil des Codes einschließt, verbindet alle zurückgegebenen Buchstaben mit einem leeren String und liefert uns ein vollständiges Wort ohne Satzzeichen. Der äußere Teil führt dieses innere List Comprehension für jedes Wort in unserer words-Liste aus. Die vom äußeren List Comprehension zurückgegebenen Wörter speichern wir in der Liste words. Am Ende zeigen wir alle Elemente der Liste words an.

Ein weiterer Vorteil der Verwendung von List Comprehensions besteht darin, dass wir Speicherplatz im RAM sparen, d. h. wir haben im gesamten Code die ursprüngliche Liste aktualisiert, anstatt eine neue Liste zum Speichern der Ergebnisse zu erstellen. Wir können auch leere Strings aus der ursprünglichen Liste entfernen, indem wir eine zusätzliche if-Anweisung in das äußere List Comprehension einfügen.

import string

words = ["hell'o", "Hi,", "bye bye", "good bye", ""]
words = [
    "".join(letter for letter in word if letter not in string.punctuation)
    for word in words
    if word
]
print(words)

Ausgabe:

['hello', 'Hi', 'bye bye', 'good bye']

Dieses Mal führt unser äußeres List Comprehension das innere List Comprehension nicht aus, wenn das Wort kein Element enthält. Bei diesem Ansatz erhalten wir keinen leeren String in der resultierenden Liste von Strings.

Entfernen von Interpunktionszeichen aus einer Liste mit der Funktion str.translate() in Python

Unsere vorherige Implementierung ist gut, da sie weniger Code erfordert und schneller ist als die Verwendung herkömmlicher Schleifen, aber sie kann besser sein. Obwohl es weniger Code ist, ist der Code etwas komplex. Der schnellste und effizienteste Weg, um Satzzeichen aus einer Liste von Strings in Python zu entfernen, ist die Funktion str.translate(). Es erfordert weniger Code als das List Comprehension und ist viel schneller. Die str.translate()-Funktion bildet jedes Zeichen innerhalb eines Strings gemäß einer Übersetzungstabelle ab. In unserem Fall werden alle Buchstaben in string.punctuation einem leeren String zugeordnet. Das folgende Codebeispiel zeigt uns, wie Sie mit der Funktion str.translate() Satzzeichen aus einer Liste entfernen.

import string

words = ["hell'o", "Hi,", "bye bye", "good bye", ""]
words = [word.translate(string.punctuation) for word in words]
print(words)

Ausgabe:

["hell'o", 'Hi,', 'bye bye', 'good bye', '']

Wir haben die Funktion str.translate() mit der Konstante string.punctuation und List Comprehension verwendet, um Satzzeichen aus unserer words-Liste zu entfernen. Das word.translate(string.punctuation) bildet jeden Buchstaben in der string.punctuation-Konstante auf einen leeren String ab, und das List Comprehension führt diesen Code für jeden String in der words-Liste aus und gibt die Ergebnisse zurück. Wir weisen alle zurückgegebenen Strings der Liste Wörter zu und zeigen die Ausgabe an.

Die Ausgabe zeigt eine leere Zeichenkette in den Ergebnissen. Um diesen leeren String weiter zu entfernen, müssen wir eine zusätzliche Bedingung in unser List Comprehension einfügen.

import string

words = ["hell'o", "Hi,", "bye bye", "good bye", ""]
words = [word.translate(string.punctuation) for word in words if word]
print(words)

Ausgabe:

["hell'o", 'Hi,', 'bye bye', 'good bye']

Wir haben den leeren String aus dem vorherigen Ergebnis mit nur einer weiteren Bedingung entfernt.

Die string.punctuation ist ein vordefinierter konstanter String, der alle möglichen Satzzeichen enthält. Mehrere Methoden verwenden diese String-Konstante, um Satzzeichen aus einer Liste von Strings zu entfernen, aber die einfachste, schnellste und effizienteste Implementierung ist die Verwendung der Funktion str.translate() mit List Comprehension.

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

Verwandter Artikel - Python List

Verwandter Artikel - Python String