Eliminar puntuación de la lista de Python

Muhammad Maisam Abbas 30 enero 2023
  1. La constante string.punctuation en Python
  2. Eliminar puntuaciones de una lista con bucles for en Python
  3. Eliminar signos de puntuación de una lista con comprensiones de listas en Python
  4. Eliminar los signos de puntuación de una lista con la función str.translate() en Python
Eliminar puntuación de la lista de Python

Este tutorial presentará la constante de cadena, string.punctuation, y discutirá algunos métodos para eliminar los signos de puntuación de una lista de cadenas en Python.

La constante string.punctuation en Python

string.punctuation es una cadena preinicializada en Python que contiene todos los signos de puntuación. Para usar esta cadena, tenemos que importar el módulo string. La constante string.punctuation se muestra en el siguiente ejemplo de codificación.

import string

print(string.punctuation)

Producción :

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

Importamos el módulo string y mostramos el valor de la constante string.punctuation. La salida muestra todos los signos de puntuación posibles en el idioma inglés.

Eliminar puntuaciones de una lista con bucles for en Python

Podemos eliminar todos los signos de puntuación de una lista de cadenas mediante el uso de string.punctuation con bucles for en Python. El siguiente ejemplo de código demuestra este fenómeno.

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)

Producción :

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

Inicializamos una lista de cadenas words que contiene signos de puntuación. Luego creamos un bucle anidado que itera a través de cada carácter en cada cadena de la lista words. El bucle externo for itera a través de cada cadena dentro de la lista, y el bucle interno for itera a través de cada letter de esa cadena. Luego verificamos si esa letter está dentro de la constante string.punctuation con la instrucción if. Si la letra está presente dentro de la constante string.punctuation, la eliminamos reemplazándola con una cadena vacía. Después de eliminar todos los signos de puntuación de una cadena, agregamos esa cadena a nuestra lista new_words. Al final, imprimimos la lista new_words.

El único problema con esta implementación es que permite que las cadenas vacías permanezcan dentro de la lista final. Dependiendo de nuestros requisitos, también podemos eliminar las cadenas vacías de la lista original colocando una marca adicional dentro de nuestros bucles. El siguiente fragmento de código también muestra cómo eliminar cadenas vacías de la lista.

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)

Producción :

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

Esta vez, nuestro código también eliminó cualquier cadena vacía de la cadena original.

Eliminar signos de puntuación de una lista con comprensiones de listas en Python

El único problema con el enfoque anterior es que requiere demasiado código para una simple tarea de eliminar los signos de puntuación de una lista de cadenas. Las listas por comprensión son una forma de realizar diferentes operaciones computacionales en los elementos de la lista. Podemos usar bucles for y declaraciones if dentro de las listas por comprensión. La principal ventaja de usar listas por comprensión es que requieren menos código y generalmente son más rápidas que un simple bucle for. Podemos usar listas por comprensión con la constante de cadena string.punctuation para eliminar los signos de puntuación de una lista de cadenas en Python. El siguiente ejemplo de código nos muestra cómo eliminar las puntuaciones de una lista con listas por comprensión.

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)

Producción :

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

Seré completamente honesto, es un poco difícil de entender el código anterior, pero no es complejo en absoluto. Simplemente está usando una comprensión de lista anidada. La parte interna del código verifica si cada letra dentro de una sola palabra está presente en la constante string.punctuation y solo devuelve aquellas letras que no están en string.punctuation. La función str.join() que encierra esta parte del código une todas las letras devueltas con una cadena vacía y nos da una palabra completa sin signos de puntuación. La parte externa ejecuta esta comprensión de la lista interna para cada palabra dentro de nuestra lista words. Almacenamos las palabras devueltas por la comprensión de la lista externa en la lista words. Al final, mostramos todos los elementos de la lista words.

Otra ventaja de usar listas por comprensión es que ahorramos espacio en la RAM, es decir, a lo largo de nuestro código, hemos actualizado la lista original en lugar de crear una nueva lista para almacenar los resultados. También podemos eliminar cadenas vacías de la lista original colocando una declaración if adicional en la comprensión de la lista externa.

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)

Producción :

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

Esta vez, nuestra comprensión de la lista externa no ejecuta la comprensión de la lista interna cuando no hay ningún elemento en la palabra. Con este enfoque, no obtenemos una cadena vacía en la lista de cadenas resultante.

Eliminar los signos de puntuación de una lista con la función str.translate() en Python

Nuestra implementación anterior es buena ya que requiere menos código y es más rápida que usar bucles tradicionales, pero puede ser mejor. Aunque es menos código, el código es un poco complejo. La forma más rápida y eficiente de eliminar las puntuaciones de una lista de cadenas en Python es la función str.translate(). Requiere menos código que las listas por comprensión y es mucho más rápido. La función str.translate() mapea cada carácter dentro de una cadena de acuerdo con una tabla de traducción. En nuestro caso, mapeará todas las letras en string.punctuation a una cadena vacía. El siguiente ejemplo de código nos muestra cómo eliminar los signos de puntuación de una lista con la función str.translate().

import string

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

Producción :

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

Usamos la función str.translate() con la constante string.punctuation y listas por comprensión para eliminar los signos de puntuación de nuestra lista words. El word.translate(string.punctuation) asigna cada letra de la constante string.punctuation a una cadena vacía, y la lista de comprensión ejecuta este código para cada cadena en la lista words y devuelve los resultados. Asignamos todas las cadenas devueltas a la lista words y mostramos la salida.

La salida muestra una cadena vacía en los resultados. Para eliminar aún más esta cadena vacía, tenemos que colocar una condición adicional dentro de nuestra lista de comprensión.

import string

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

Producción :

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

Eliminamos la cadena vacía del resultado anterior con solo una condición más.

La string.punctuation es una cadena constante predefinida que contiene todos los signos de puntuación posibles. Múltiples métodos usan esta constante de cadena para eliminar las puntuaciones de una lista de cadenas, pero la implementación más fácil de escribir, más rápida y más eficiente es usar la función str.translate() con listas por comprensión.

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

Artículo relacionado - Python List

Artículo relacionado - Python String