logo

Pitón | Convertir todas las cadenas de la lista a números enteros

Las bibliotecas de Python facilitan con bastante facilidad la interconversión entre tipos de datos. Pero el problema de convertir la lista completa de cadenas a números enteros es bastante común en el ámbito del desarrollo. Analicemos algunas formas de resolver este problema en particular.

Convertir todas las cadenas de la lista a números enteros usando eval()

Función de evaluación de Python () analiza el argumento de la expresión y lo evalúa como una expresión de Python y ejecuta la expresión (código) de Python. Si la expresión es una representación int, Python convierte el argumento en un número entero.



Python3








lis>=> [>'1'>,>'-4'>,>'3'>,>'-6'>,>'7'>]> res>=> [>eval>(i)>for> i>in> lis]> print>(>'Modified list is: '>, res)>

>

>

cadena java en matriz

Producción:

Modified list is: [1, -4, 3, -6, 7]>

Convertir todas las cadenas de la lista a números enteros Método ingenuo

Este es el método más genérico que le ocurre a cualquier programador al realizar este tipo de operación. Simplemente recorre toda la lista y convierte cada cadena de la lista a int mediante conversión de tipos.

Python3




test_list>=> [>'1'>,>'4'>,>'3'>,>'6'>,>'7'>]> # using loop> for> i>in> range>(>0>,>len>(test_list)):> >test_list[i]>=> int>(test_list[i])> # Printing modified list> print>(>'Modified list is : '> +> str>(test_list))>

>

>

Producción:

Modified list is: [1, 4, 3, 6, 7]>

Convertir todas las cadenas de la lista a números enteros usando comprensión de la lista

Esta es solo una especie de réplica del método anterior, simplemente implementada mediante comprensión de listas, una especie de abreviatura que un desarrollador siempre busca. Ahorra el tiempo y la complejidad de codificar una solución.

Python3




test_list>=> [>'1'>,>'4'>,>'3'>,>'6'>,>'7'>]> # using list comprehension to> # perform conversion> test_list>=> [>int>(i)>for> i>in> test_list]> > # Printing modified list> print> (>'Modified list is : '> +> str>(test_list))>

>

>

Producción:

Modified list is : [1, 4, 3, 6, 7]>

Convertir todas las cadenas de la lista a números enteros usando mapa()

Este es el método más elegante, pitónico y recomendado para realizar esta tarea en particular. Esta función está hecha exclusivamente para este tipo de tareas y debe utilizarse para realizarlas.

Python3




test_list>=> [>'1'>,>'4'>,>'3'>,>'6'>,>'7'>]> # using map() to> # perform conversion> test_list>=> list>(>map>(>int>, test_list))> # Printing modified list> print>(>'Modified list is : '> +> str>(test_list))>

>

>

Producción:

Modified list is : [1, 4, 3, 6, 7]>

Conversión de todas las cadenas de la lista a números enteros Lista de cadenas con representaciones de enteros mixtos

Aquí, primero convertiremos cada cadena en un flotante y luego la convertiremos en un número entero usando la función round(); de lo contrario, arrojará un error.

Python3




lis>=> [>'1.1'>,>'4'>,>'3.5'>,>'6.7'>,>'7.2'>]> res>=> [>round>(>float>(i))>for> i>in> lis]> print>(>'Modified list is: '>, res)>

>

>

Producción:

Modified list is: [1, 4, 4, 7, 7]>

Convertir todas las cadenas de la lista a números enteros usando la función ast.literal_eval() del módulo ast

Otro enfoque que se puede utilizar para convertir una lista de cadenas en una lista de números enteros es utilizar la función ast.literal_eval() del módulo ast. Esta función le permite evaluar una cadena como un literal de Python, lo que significa que puede analizar y evaluar cadenas que contienen expresiones de Python, como números, listas, diccionarios, etc.

Aquí hay un ejemplo de cómo usar ast.literal_eval() para convertir una lista de cadenas en una lista de números enteros:

Python3




import> ast> # Initialize list of strings> test_list>=> [>'1'>,>'4'>,>'3'>,>'6'>,>'7'>]> # Convert strings to integers using ast.literal_eval()> test_list>=> [ast.literal_eval(s)>for> s>in> test_list]> # Print resulting list> print>(>'Modified list:'>, test_list)> #This code is contributed by Edula Vinay Kumar Reddy>

>

>

Producción

Modified list: [1, 4, 3, 6, 7]>

La complejidad temporal de usar la función ast.literal_eval() del módulo ast para convertir una lista de cadenas en una lista de números enteros es O(n), donde n es la longitud de la lista. Esto significa que el tiempo necesario para ejecutar este enfoque es directamente proporcional al tamaño de la lista de entrada.

En términos de complejidad espacial, este enfoque tiene una complejidad espacial de O(n), porque crea una nueva lista de números enteros que tiene el mismo tamaño que la lista de entrada.

Convertir todas las cadenas de la lista a números enteros usando la función numpy.array()

  1. Definir una lista de cadenas
  2. Convierta la lista en una matriz numpy de tipo int usando la función numpy.array()
  3. Convierta la matriz numpy nuevamente en una lista usando función lista()
  4. Imprimir la lista modificada

Python3




import> numpy as np> > # Define list of strings> my_list>=> [>'1'>,>'4'>,>'3'>,>'6'>,>'7'>]> > # Convert list to numpy array of type int> my_array>=> np.array(my_list, dtype>=>int>)> > # Convert numpy array back to list> modified_list>=> list>(my_array)> > # Print modified list> print>(>'Modified list is: '>, modified_list)>

>

>

Producción:

Modified list is: [1, 4, 3, 6, 7]>

Complejidad temporal: la complejidad temporal de este enfoque es O (n), donde n es la longitud de la lista. La función numpy.array() tarda O(n) tiempo en crear una nueva matriz, y la función list() tarda O(n) tiempo en convertir la matriz nuevamente en una lista.

Complejidad espacial: la complejidad espacial de este enfoque es O (n), porque crea una nueva matriz numpy de tipo int que tiene el mismo tamaño que la lista de entrada.

Enfoque: utilizando la función json.loads():

Algoritmo:

  1. Cree una lista de cadenas test_list con los valores ['1', '4', '3', '6', '7']
  2. Utilice el método join() para unir las cadenas en test_list junto con comas, lo que dará como resultado la cadena '1,4,3,6,7'
  3. Agregue corchetes alrededor de la cadena resultante, lo que dará como resultado la cadena '[1,4,3,6,7]'
    Utilice el método loads() de la biblioteca json para analizar la cadena como una matriz JSON, lo que dará como resultado la lista [1, 4, 3, 6, 7]
  4. Asigne la lista resultante a new_list
  5. Imprima la cadena La lista modificada es: seguida de la representación de cadena de new_list

Python3




import> json> test_list>=> [>'1'>,>'4'>,>'3'>,>'6'>,>'7'>]> new_list>=> json.loads(>'['> +> ','>.join(test_list)>+> ']'>)> print>(>'Modified list is : '> +> str>(new_list))> #This code is contributed by Vinay pinjala>

>

>

Producción

Modified list is : [1, 4, 3, 6, 7]>

La complejidad del tiempo: O (n), donde n es la longitud de test_list. Esto se debe a que el método join() tarda O(n) tiempo en concatenar las cadenas, y el método loads() tarda O(n) tiempo en analizar la cadena resultante.

La complejidad del espacio: O (n), ya que la lista resultante ocupa O(n) espacio en la memoria.

Convertir todas las cadenas de la lista a números enteros usando el módulo re

algoritmo paso a paso para el enfoque de expresión regular para extraer valores numéricos de una lista de cadenas

algoritmo dfs
  1. Defina una lista de entrada de cadenas.
  2. Defina un patrón de expresión regular para que coincida con los valores numéricos de las cadenas.
  3. Inicialice una lista vacía para almacenar los valores numéricos convertidos.
  4. Itere sobre cada cadena en la lista de entrada.
  5. Utilice el patrón de expresión regular para buscar un valor numérico en la cadena.
  6. Si se encuentra una coincidencia, extraiga la subcadena coincidente y conviértala en un flotante.
  7. Agregue el valor convertido a la lista de salida.
  8. Una vez que se hayan procesado todas las cadenas de la lista de entrada, devuelva la lista de salida.

Python3




import> re> # Define the input list> lis>=> [>'1'>,>'-4'>,>'3'>,>'-6'>,>'7'>]> # Define a regular expression pattern to match numerical values> pattern>=> re.>compile>(r>'-?d+(?:.d+)?'>)> # Initialize an empty list to store converted values> res>=> []> # Iterate over each string in the input list> for> s>in> lis:> ># Use the pattern to search for a numerical value in the string> >match>=> pattern.search(s)> ># If a match is found, extract the matched substring and convert it to a float> >if> match>is> not> None>:> >res.append(>int>(match.group()))> # Print the modified list of converted values> print>(>'Modified list is: '>, res)>

>

>

Producción

Modified list is: [1, -4, 3, -6, 7]>

Complejidad del tiempo: La complejidad temporal de este enfoque es O (nm), donde n es el número de cadenas en la lista de entrada y m es la longitud máxima de cualquier cadena en la lista. El patrón de expresión regular debe aplicarse a cada cadena de la lista, lo que lleva O(m) tiempo en el peor de los casos. Por lo tanto, la complejidad temporal general es O (nm).
Complejidad del espacio auxiliar: La complejidad del espacio auxiliar de este enfoque es O(k), donde k es el número de valores numéricos en la lista de entrada. Necesitamos almacenar cada valor numérico convertido en la lista de salida, lo que requiere espacio O(k). Además, necesitamos almacenar un objeto de expresión regular, que requiere espacio constante. Por lo tanto, la complejidad general del espacio auxiliar es O (k).