Supprimer la ponctuation de la liste Python

Muhammad Maisam Abbas 30 janvier 2023
  1. La constante string.punctuation en Python
  2. Supprimer les ponctuations d’une liste avec des boucles for en Python
  3. Supprimer les ponctuations d’une liste avec des compréhensions de liste en Python
  4. Supprimer les ponctuations d’une liste avec la fonction str.translate() en Python
Supprimer la ponctuation de la liste Python

Ce didacticiel présentera la constante de chaîne, string.punctuation, et discutera de certaines méthodes pour supprimer les signes de ponctuation d’une liste de chaînes en Python.

La constante string.punctuation en Python

La string.punctuation est une chaîne pré-initialisée en Python qui contient tous les signes de ponctuation. Pour utiliser cette chaîne, nous devons importer le module string. La constante string.punctuation est illustrée dans l’exemple de codage suivant.

import string

print(string.punctuation)

Production :

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

Nous avons importé le module string et affiché la valeur de la constante string.punctuation. La sortie affiche tous les signes de ponctuation possibles en anglais.

Supprimer les ponctuations d’une liste avec des boucles for en Python

Nous pouvons supprimer tous les signes de ponctuation d’une liste de chaînes en utilisant le string.punctuation avec les boucles for en Python. L’exemple de code suivant illustre ce phénomène.

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)

Production :

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

Nous avons initialisé une liste de chaînes words qui contient des signes de ponctuation. Nous avons ensuite créé une boucle imbriquée qui parcourt chaque caractère de chaque chaîne de la liste words. La boucle externe for parcourt chaque chaîne à l’intérieur de la liste, et la boucle interne for parcourt chaque letter de cette chaîne. Nous avons ensuite vérifié si cette letter est à l’intérieur de la constante string.punctuation avec l’instruction if. Si la lettre est présente à l’intérieur de la constante string.punctuation, nous la supprimons en la remplaçant par une chaîne vide. Après avoir supprimé tous les signes de ponctuation d’une chaîne, nous ajoutons cette chaîne dans notre liste new_words. Au final, nous avons imprimé la liste des new_words.

Le seul problème avec cette implémentation est qu’elle permet aux chaînes vides de rester dans la liste finale. Selon nos besoins, nous pouvons également supprimer les chaînes vides de la liste d’origine en plaçant une vérification supplémentaire dans nos boucles. L’extrait de code suivant montre également comment supprimer les chaînes vides de la liste.

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)

Production :

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

Cette fois-ci, notre code a également supprimé toutes les chaînes vides de la chaîne d’origine.

Supprimer les ponctuations d’une liste avec des compréhensions de liste en Python

Le seul problème avec l’approche précédente est qu’elle nécessite trop de code pour une simple tâche consistant à supprimer les ponctuations d’une liste de chaînes. Les compréhensions de liste sont un moyen d’effectuer différentes opérations de calcul sur des éléments de liste. Nous pouvons utiliser des boucles for et des instructions if dans les compréhensions de liste. Le principal avantage de l’utilisation des compréhensions de liste est qu’elles nécessitent moins de code et sont généralement plus rapides qu’une simple boucle for. Nous pouvons utiliser des compréhensions de liste avec la constante de chaîne string.punctuation pour supprimer les signes de ponctuation d’une liste de chaînes en Python. L’exemple de code suivant nous montre comment supprimer les ponctuations d’une liste avec des compréhensions de liste.

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)

Production :

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

Je vais être tout à fait honnête, il est un peu difficile de comprendre le code ci-dessus, mais ce n’est pas du tout complexe. Il utilise simplement une compréhension de liste imbriquée. La partie interne du code vérifie si chaque lettre à l’intérieur d’un seul mot est présente dans la constante string.punctuation et ne renvoie que les lettres qui ne sont pas dans string.punctuation. La fonction str.join() renfermant cette partie du code joint toutes les lettres renvoyées avec une chaîne vide et nous donne un mot complet sans aucun signe de ponctuation. La partie externe exécute cette compréhension de liste interne pour chaque mot à l’intérieur de notre liste de words. Nous stockons les mots renvoyés par la compréhension de la liste externe dans la liste words. Au final, nous affichons tous les éléments de la liste words.

Un autre avantage de l’utilisation des compréhensions de liste est que nous économisons de l’espace sur la RAM, c’est-à-dire que tout au long de notre code, nous avons mis à jour la liste d’origine au lieu de créer une nouvelle liste pour stocker les résultats. Nous pouvons également supprimer les chaînes vides de la liste d’origine en plaçant une instruction if supplémentaire dans la compréhension de la liste externe.

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)

Production :

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

Cette fois, notre compréhension de liste externe n’exécute pas la compréhension de liste interne lorsqu’il n’y a aucun élément dans le mot. Avec cette approche, nous n’obtenons pas de chaîne vide dans la liste de chaînes résultante.

Supprimer les ponctuations d’une liste avec la fonction str.translate() en Python

Notre implémentation précédente est bonne car elle nécessite moins de code et est plus rapide que l’utilisation de boucles traditionnelles, mais elle peut être meilleure. Bien qu’il s’agisse de moins de code, le code est un peu complexe. Le moyen le plus rapide et le plus efficace de supprimer les ponctuations d’une liste de chaînes en Python est la fonction str.translate(). Il nécessite moins de code que les listes de compréhension et est beaucoup plus rapide. La fonction str.translate() mappe chaque caractère à l’intérieur d’une chaîne selon une table de traduction. Dans notre cas, il mappera toutes les lettres de string.punctuation sur une chaîne vide. L’exemple de code suivant nous montre comment supprimer les signes de ponctuation d’une liste avec la fonction str.translate().

import string

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

Production :

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

Nous avons utilisé la fonction str.translate() avec la constante string.punctuation et les compréhensions de liste pour supprimer les signes de ponctuation de notre liste words. Le fonction string.translate(string.punctuation) mappe chaque lettre de la constante string.punctuation à une chaîne vide, et la compréhension de la liste exécute ce code pour chaque chaîne de la liste words et renvoie les résultats. Nous attribuons toutes les chaînes renvoyées à la liste words et affichons la sortie.

La sortie affiche une chaîne vide dans les résultats. Pour supprimer davantage cette chaîne vide, nous devons placer une condition supplémentaire dans notre compréhension de liste.

import string

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

Production :

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

Nous avons supprimé la chaîne vide du résultat précédent avec une seule condition supplémentaire.

La string.punctuation est une chaîne constante prédéfinie qui contient tous les signes de ponctuation possibles. Plusieurs méthodes utilisent cette constante de chaîne pour supprimer les ponctuations d’une liste de chaînes, mais l’implémentation la plus simple à écrire, la plus rapide et la plus efficace consiste à utiliser la fonction str.translate() avec des compréhensions de liste.

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

Article connexe - Python List

Article connexe - Python String