16 One-Liners útiles de Python para simplificar tareas comunes

¿Buscas escribir código elegante y Pythonic? Aquí hay una lista de frases útiles de Python para realizar tareas simples.

Si es un programador principiante de Python, dedicará tiempo a comprender las estructuras de datos básicas, como listas y cadenas. Y algunas operaciones en estas estructuras de datos se pueden lograr a través de fragmentos de código concisos de una línea.

Como programador, debe priorizar la legibilidad y el mantenimiento por encima de acortar el código. Pero en Python es fácil encontrar frases ingeniosas que sigan buenas prácticas de codificación.

En este artículo, nos centraremos en frases sencillas para tareas simples de procesamiento de cadenas y listas en Python.

¡Empecemos!

Generar una lista de números

La forma más sencilla de generar una lista de números es usando la función range(). La función range() devuelve un objeto de rango que puede convertir en una lista. El uso de rango (num) dará la secuencia 0, 1, 2, .., num-1.

>>> nums = list(range(10))
>>> nums
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Más sobre el uso de la función range()

También puede usar la función range() junto con un valor de paso opcional. Por lo tanto, el rango (inicio, final, paso) dará inicio a la secuencia, inicio + paso, inicio + 2*paso, y así sucesivamente. El último valor será inicio + k*paso tal que (inicio + k*paso) < fin y (inicio + (k+1)*paso) > fin.

Encuentre los valores máximo y mínimo en una lista

Puede utilizar las funciones max y min integradas para calcular los elementos máximo y mínimo de una lista, respectivamente.

>>> min_elt, max_elt = min(nums), max(nums)
>>> min_elt
0
>>> max_elt
9

📑 Nota sobre asignación múltiple

Tenga en cuenta que hemos asignado valores a min_elt y max_elt en una sola declaración de asignación. Python admite tal asignación múltiple. Y esto puede ser útil al desempaquetar iterables y asignar valores a múltiples variables al mismo tiempo.

Eliminar duplicados de una lista

Otra operación común es eliminar duplicados de las listas de Python. Esto es necesario cuando necesita trabajar solo con los valores únicos. La forma más sencilla de hacerlo es convertir la lista en un conjunto.

Un conjunto es una estructura de datos incorporada cuyos elementos son todos únicos y modificables.

>>> nums1 = [2,4,7,9,7,10]

En nums1, el elemento 7 aparece dos veces. Convertirlo en un conjunto eliminará el duplicado (aquí, 7) dejándonos con una lista de valores únicos.

Debido a que aún necesitamos trabajar con la lista, convertiremos el conjunto nuevamente en una lista. Esta operación se puede lograr con la siguiente línea de código:

>>> nums1 = list(set(nums1))
>>> nums1
[2, 4, 7, 9, 10]

📒 Para obtener más información sobre otras técnicas para eliminar duplicados de las listas de Python, consulte esta guía.

Contar ocurrencias en una lista

Para contar la cantidad de veces que aparece un elemento en una lista, puede usar el método incorporado count(). list.count(elt) devuelve el número de veces que aparece elt en la lista.

>>> nums
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Aquí, 7 aparece una vez en la lista de números, por lo que el método count() devuelve 1.

>>> nums.count(7)
1

Comprobar si todos los elementos de la lista cumplen una condición

Para comprobar si todos los elementos de una lista cumplen una condición, puede utilizar la función integrada all() de Python.

La función all() toma un iterable como argumento y devuelve True si todos los elementos en el iterable se evalúan como True (o son verdaderos).

Aquí, nos gustaría comprobar si todos los elementos de la lista nums2 son impares.

>>> nums2 = [3,4,7,11,21,67,12]

Podemos usar la comprensión de listas para construir una lista de valores booleanos y podemos pasar esa lista como argumento a la función all().

Aquí, num%2!=0 será False para los elementos 4 y 12 que son pares. Por lo tanto, la lista de valores booleanos construidos mediante la expresión de comprensión de lista contiene False (y all(list) devuelve False).

>>> all([num%2!=0 for num in nums2])
False

💡 Es importante tener en cuenta que todos([]) (todos (cualquiera-vacío-iterable) devuelve True.

Comprobar si algún elemento de la lista cumple una condición

Para comprobar si algún elemento de una lista cumple una condición, puede utilizar la función any(). any(some-list) devuelve True si al menos un elemento se evalúa como True.

>>> nums2 = [3,4,7,11,21,67,12]

Al igual que con el ejemplo anterior, usamos la comprensión de listas para obtener una lista de valores booleanos. La lista nums contiene números pares. Entonces la función any() devuelve True.

>>> any([num%2 for num in nums2])
True

Invertir una cadena

En Python, las cadenas son inmutables, por lo que cuando desea invertir una cadena, solo puede obtener una copia invertida de la cadena. Hay dos enfoques comunes, los cuales se pueden escribir como frases sencillas de Python, que utilizan el corte de cadenas y funciones integradas.

Usando el corte de cuerdas

La división de cadenas con valores negativos de paso devuelve una porción de la cadena que comienza desde el final. La sintaxis es cadena[start:stop:step]. Entonces, ¿qué devuelve establecer el paso de -1 e ignorar los índices de inicio y parada?

Devuelve una copia de la cadena, comenzando desde el final de la cadena, incluidos todos los caracteres.

>>> str1[::-1]
'olleh'

Usando la función invertida()

La función invertida() incorporada devuelve un iterador inverso sobre una secuencia.

>>> reversed(str1)
<reversed object at 0x008BAF70>
>>> for char in str1:
...     print(char)
...
h
e
l
l
o

Puede usarlo junto con el método join(), como se muestra:

>>> ''.join(reversed(str1))
'olleh'

Convertir una cadena en una lista de caracteres

Supongamos que nos gustaría dividir una cadena en una lista de caracteres. Podemos hacerlo usando la expresión de comprensión de lista.

>>> str1 = 'hello'

Las listas de comprensión son una de las frases más poderosas de Python.

📒 Obtenga más información sobre la comprensión de listas en Python.

Recorremos la cadena y recopilamos cada carácter.

>>> chars = [char for char in str1]
>>> chars
['h', 'e', 'l', 'l', 'o']

Para dividir una cadena más larga en una lista de cadenas en cada aparición de espacios en blanco, puede usar el método split().

>>> str2 = 'hello world'
>>> str2.split()
['hello', 'world']

Ya hemos visto cómo usar la comprensión de listas para dividir una cadena en una lista de caracteres. En ese ejemplo, recopilamos todos los caracteres recorriendo la cadena.

Aquí, necesitamos recorrer la cadena y recopilar solo los dígitos. ¿Entonces cómo hacemos eso?

  • Podemos establecer la condición de filtrado en la expresión de comprensión de lista usando el método isdigit().
  • c.isdigit() devuelve True si c es un dígito; de lo contrario, devuelve False.
>>> str3 = 'python3'
>>> digits = [c for c in str3 if c.isdigit()]
>>> digits
['3']

Comprobar si una cadena comienza con una subcadena específica

Para verificar si una cadena comienza con una subcadena específica, puede usar el método de cadena beginwith(). str1.startswith(substring) devuelve True si str1 comienza con substring. De lo contrario, devuelve False.

Aquí hay un par de ejemplos:

>>> str4 = 'coding'
>>> str4.startswith('co')
True
>>> str5 = 'python'
>>> str5.startswith('co')
False

Comprobar si una cadena termina con una subcadena específica

Como habrás adivinado, para verificar si una cadena termina con una subcadena dada, puedes usar el método Endswith().

>>> str5 = 'python'
>>> str5.endswith('on')
True

También podemos usar el método de cadena dentro de una expresión de comprensión de lista para obtener extremos_con, una lista de valores booleanos.

>>> strs = ['python','neon','nano','silicon']
>>> ends_with = [str.endswith('on') for str in strs]
>>> ends_with
[True, True, False, True]

Unir elementos de una lista en una cadena

Ya hemos visto cómo dividir una cadena en una lista de caracteres. Ahora, ¿cómo hacemos la operación inversa de unir los elementos de una lista en una cadena?

Para hacer esto, puede usar el método de cadena join() con la sintaxis: separator.join(some-list).

Solo nos gustaría combinar los elementos de la lista en una sola cadena; no necesitamos ningún separador. Así que establecemos el separador en una cadena vacía.

>>> list_1 = ['p','y','t','h','o','n','3']
>>> ''.join(list_1)
'python3'

Crear un diccionario de Python

Así como la comprensión de listas puede ayudarnos a construir nuevas listas a partir de iterables existentes, la comprensión de diccionarios puede ayudarnos a construir nuevos diccionarios a partir de iterables existentes.

Las comprensiones de diccionarios de Python son poderosas frases ingeniosas que pueden ayudar a construir un diccionario sobre la marcha.

Aquí, tenemos nombres que es una lista de cadenas.

>>> names = ['Joe','Amy','Jake','Florence']

Creamos names_d, un diccionario que contiene cadenas de nombres como claves y las longitudes de las cadenas como valor.

>>> names_d = {name:len(name) for name in names}
>>> names_d
{'Joe': 3, 'Amy': 3, 'Jake': 4, 'Florence': 8}

Asignar valores condicionalmente a las variables

En ocasiones, es posible que deba asignar valores a las variables según una condición específica.

Por ejemplo, puede leer en la entrada del usuario, digamos, la edad del individuo. Y dependiendo del valor de entrada, puede decidir si se les permite o no asistir a una fiesta.

Para hacer esta asignación condicional en Python, puede escribir la siguiente línea usando el operador ternario.

>>> age = 21
>>> allowed = True if age >= 18 else False
>>> allowed
True

🔖 Aprenda más sobre el operador ternario en Python.

Generar todas las permutaciones

La permutación se refiere a una posible disposición de elementos en un grupo. Si hay n elementos únicos en un grupo, ¡hay n! formas posibles de organizarlos, y por lo tanto, n! permutaciones

Usemos las siguientes letras de lista:

>>> letters = ['a','b','c']

Puede usar permutaciones del módulo itertools para generar todas las permutaciones posibles del iterable dado.

>>> letters_p = permutations(letters)
>>> letters_p
<itertools.permutations object at 0x0127AF50>

Como se ve, el uso de permutaciones (iterables) devuelve un objeto de permutación que podemos recorrer usando un bucle for:

>>> for p in letters_p:
...     print(p)
...
('a', 'b', 'c')
('a', 'c', 'b')
('b', 'a', 'c')
('b', 'c', 'a')
('c', 'a', 'b')
('c', 'b', 'a')

Pero podemos reescribirlo como una expresión de una línea al convertir el objeto de permutación en una lista:

>>> letters_p = list(permutations(letters))
>>> letters_p
[('a', 'b', 'c'), ('a', 'c', 'b'), ('b', 'a', 'c'), ('b', 'c', 'a'), ('c', 'a', 'b'), ('c', 'b', 'a')]

Aquí, hay tres elementos únicos y hay 3!=6 permutaciones posibles.

Generar subconjuntos de una lista

A veces, es posible que necesite construir todos los subconjuntos posibles de un tamaño particular a partir de una lista u otros iterables. Usemos la lista de letras y obtengamos todas las sublistas de tamaño 2.

Para hacerlo, podemos usar combinaciones del módulo itertools, así:

>>> from itertools import combinations
>>> letters_2 = list(combinations(letters,2))
>>> letters_2
[('a', 'b'), ('a', 'c'), ('b', 'c')]

Conclusión

En este tutorial, analizamos las frases útiles de Python para realizar operaciones comunes en listas y cadenas. También aprendimos frases ingeniosas como listas de Python y comprensiones de diccionarios y cómo usarlos junto con funciones integradas para realizar las tareas deseadas.

Como siguiente paso, consulte esta lista de proyectos de Python para principiantes.