Extraer, reemplazar y transformar elementos específicos de listas (arrays) de Python

Negocio

Para generar una nueva lista en Python extrayendo o eliminando sólo aquellos elementos de una lista existente (array) que satisfagan ciertas condiciones, o realizando sustituciones o conversiones, utilice las comprensiones de listas.

Aquí se explica lo siguiente, junto con un código de ejemplo.

  • Forma básica de notación de comprensión de listas
  • Aplicar el proceso a todos los elementos de la lista
  • Extraer y eliminar los elementos de la lista que cumplen los criterios
  • Sustituir o convertir los elementos que cumplen las condiciones de la lista

Consulte el siguiente artículo para ver ejemplos concretos de listas de cadenas.

También es posible extraer aleatoriamente elementos que no cumplan los criterios.

Tenga en cuenta que las listas pueden almacenar diferentes tipos de datos y son estrictamente diferentes de los arrays. Si quieres manejar arrays en procesos que requieren tamaño de memoria y direcciones de memoria o procesamiento numérico de grandes datos, utiliza array (biblioteca estándar) o NumPy.

La siguiente lista es un ejemplo

l = list(range(-5, 6))
print(l)
# [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]

Forma básica de notación de comprensión de listas

Cuando se genera una nueva lista a partir de una lista, las comprensiones de lista son más sencillas de escribir que los bucles for.

[expression for any variable name in iterable object if conditional expression]

Una expresión se aplica a un elemento que satisface la expresión condicional de un objeto iterable (como una lista o tupla) y se convierte en un elemento de una nueva lista. La «expresión condicional if» puede omitirse, en cuyo caso la expresión se aplica a todos los elementos.

Consulte el siguiente artículo para obtener más detalles, incluida la notación de comprensión de listas anidadas.

Aplicar el proceso a todos los elementos de la lista

Por ejemplo, si desea aplicar algún tratamiento a todos los elementos de una lista, describa el tratamiento deseado en la expresión de comprensión de la lista anterior.

l_square = [i**2 for i in l]
print(l_square)
# [25, 16, 9, 4, 1, 0, 1, 4, 9, 16, 25]

l_str = [str(i) for i in l]
print(l_str)
# ['-5', '-4', '-3', '-2', '-1', '0', '1', '2', '3', '4', '5']

Se puede utilizar para convertir entre listas de números y listas de cadenas.

Extraer y eliminar los elementos de la lista que cumplen los criterios

Si el elemento sólo debe ser seleccionado por una expresión condicional, no es procesado por una expresión, por lo que toma la siguiente forma

[variable name for variable name in original list if conditional expression]

Se genera una nueva lista de la que sólo se extraen los elementos que satisfacen la condición (elementos para los que la expresión condicional es verdadera).

l_even = [i for i in l if i % 2 == 0]
print(l_even)
# [-4, -2, 0, 2, 4]

l_minus = [i for i in l if i < 0]
print(l_minus)
# [-5, -4, -3, -2, -1]

Si «expresión condicional if» se establece como «expresión condicional if not», se convierte en una negación, y sólo se pueden seleccionar y extraer los elementos que no satisfacen la condición (elementos para los que la expresión condicional es falsa). En otras palabras, se genera una nueva lista de la que se eliminan los elementos que satisfacen la condición.

l_odd = [i for i in l if not i % 2 == 0]
print(l_odd)
# [-5, -3, -1, 1, 3, 5]

l_plus = [i for i in l if not i < 0]
print(l_plus)
# [0, 1, 2, 3, 4, 5]

Por supuesto, el mismo resultado se obtiene especificando la expresión condicional equivalente sin utilizar not.

l_odd = [i for i in l if i % 2 != 0]
print(l_odd)
# [-5, -3, -1, 1, 3, 5]

l_plus = [i for i in l if i >= 0]
print(l_plus)
# [0, 1, 2, 3, 4, 5]

La parte de la expresión condicional puede tener múltiples condiciones. También se pueden utilizar nots negativos.

l_minus_or_even = [i for i in l if (i < 0) or (i % 2 == 0)]
print(l_minus_or_even)
# [-5, -4, -3, -2, -1, 0, 2, 4]

l_minus_and_odd = [i for i in l if (i < 0) and not (i % 2 == 0)]
print(l_minus_and_odd)
# [-5, -3, -1]

Sustituir o convertir los elementos que cumplen las condiciones de la lista

En el ejemplo de extracción de elementos anterior, se eliminaron los elementos que no cumplían las condiciones.

Si desea realizar sustituciones, conversiones, etc. sólo en los elementos que satisfacen las condiciones, aplique el operador ternario a la parte de expresión de la notación de comprensión de la lista.

En Python, el operador ternario puede escribirse como sigue

True Value if Conditional Expression else False Value
a = 80
x = 100 if a > 50 else 0
print(x)
# 100

b = 30
y = 100 if b > 50 else 0
print(y)
# 0

Es un poco complicado, pero la combinación de la notación de comprensión de listas y los operadores ternarios es la siguiente.

[True Value if Conditional Expression else False Value for any variable name in original list]

La parte encerrada entre paréntesis es el operador ternario (los paréntesis no son necesarios en el código real).

[(True Value if Conditional Expression else False Value) for any variable name in original list]

Si algún nombre de variable se escribe tal cual para valores verdaderos o falsos, el valor del elemento original se utiliza tal cual. Si se escribe una expresión, se aplica el tratamiento de esa expresión.

l_replace = [100 if i > 0 else i for i in l]
print(l_replace)
# [-5, -4, -3, -2, -1, 0, 100, 100, 100, 100, 100]

l_replace2 = [100 if i > 0 else 0 for i in l]
print(l_replace2)
# [0, 0, 0, 0, 0, 0, 100, 100, 100, 100, 100]

l_convert = [i * 10 if i % 2 == 0 else i for i in l]
print(l_convert)
# [-5, -40, -3, -20, -1, 0, 1, 20, 3, 40, 5]

l_convert2 = [i * 10 if i % 2 == 0 else i / 10 for i in l]
print(l_convert2)
# [-0.5, -40, -0.3, -20, -0.1, 0, 0.1, 20, 0.3, 40, 0.5]
Copied title and URL