logo

Pitone | Conversione di tutte le stringhe nell'elenco in numeri interi

L'interconversione tra tipi di dati è facilitata abbastanza facilmente dalle librerie Python. Ma il problema di convertire l'intero elenco di stringhe in numeri interi è abbastanza comune nel dominio dello sviluppo. Discutiamo alcuni modi per risolvere questo particolare problema.

Convertire tutte le stringhe nell'elenco in numeri interi utilizzando eval()

Funzione Python eval() analizza l'argomento dell'espressione e valutalo come espressione Python ed esegue l'espressione Python (codice). Se l'espressione è una rappresentazione intera, Python converte l'argomento in un numero intero.



Python3








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

>

>

jdbc jdbc

Produzione:

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

Conversione di tutte le stringhe nell'elenco in numeri interi Metodo Naive

Questo è il metodo più generico che colpisce qualsiasi programmatore mentre esegue questo tipo di operazione. Basta scorrere l'intero elenco e convertire ogni stringa dell'elenco in int per tipo casting.

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))>

>

>

Produzione:

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

Convertire tutte le stringhe nell'elenco in numeri interi Utilizzando comprensione delle liste

Questa è solo una sorta di replica del metodo sopra, implementato utilizzando la comprensione delle liste, una sorta di abbreviazione che uno sviluppatore cerca sempre. Risparmia il tempo e la complessità della codifica di una soluzione.

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))>

>

>

Produzione:

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

Convertire tutte le stringhe nell'elenco in numeri interi Utilizzando carta geografica()

Questo è il metodo più elegante, Pythonic e consigliato per eseguire questo particolare compito. Questa funzione è destinata esclusivamente a questo tipo di attività e deve essere utilizzata per eseguirle.

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))>

>

>

Produzione:

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

Conversione di tutte le stringhe nell'elenco in numeri interi Elenco di stringhe con rappresentazioni di numeri interi misti

Qui, convertiremo prima ogni stringa in un float e poi la convertiremo in un numero intero utilizzando la funzione round(), altrimenti genererà un errore.

Python3




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

>

>

Produzione:

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

Convertire tutte le stringhe nell'elenco in numeri interi Utilizzando la funzione ast.literal_eval() dal modulo ast

Un altro approccio che può essere utilizzato per convertire un elenco di stringhe in un elenco di numeri interi è utilizzare la funzione ast.literal_eval() dal modulo ast. Questa funzione consente di valutare una stringa come letterale Python, il che significa che può analizzare e valutare stringhe che contengono espressioni Python, come numeri, elenchi, dizionari, ecc.

Ecco un esempio di come utilizzare ast.literal_eval() per convertire un elenco di stringhe in un elenco di numeri interi:

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>

>

>

Produzione

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

La complessità temporale dell'utilizzo della funzione ast.literal_eval() dal modulo ast per convertire un elenco di stringhe in un elenco di numeri interi è O(n), dove n è la lunghezza dell'elenco. Ciò significa che il tempo necessario per eseguire questo approccio è direttamente proporzionale alla dimensione dell'elenco di input.

In termini di complessità spaziale, questo approccio ha una complessità spaziale pari a O(n), perché crea un nuovo elenco di numeri interi che ha la stessa dimensione dell'elenco di input.

Convertire tutte le stringhe nell'elenco in numeri interi utilizzando la funzione numpy.array()

  1. Definire un elenco di stringhe
  2. Converti l'elenco in un array numpy di tipo int utilizzando la funzione numpy.array()
  3. Converti nuovamente l'array Numpy in un elenco utilizzando funzione lista()
  4. Stampa l'elenco modificato

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)>

>

>

Produzione:

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

Complessità temporale: la complessità temporale di questo approccio è O(n), dove n è la lunghezza dell'elenco. La funzione numpy.array() impiega O(n) tempo per creare un nuovo array e la funzione list() impiega O(n) tempo per riconvertire l'array in un elenco.

Complessità spaziale: la complessità spaziale di questo approccio è O(n), perché crea un nuovo array numpy di tipo int che ha le stesse dimensioni dell'elenco di input.

Approccio: utilizzo della funzione json.loads():

Algoritmo:

  1. Crea un elenco di stringhe test_list con i valori ['1', '4', '3', '6', '7']
  2. Utilizza il metodo join() per unire le stringhe in test_list insieme alle virgole, ottenendo come risultato la stringa '1,4,3,6,7'
  3. Aggiungi parentesi quadre attorno alla stringa risultante, ottenendo la stringa '[1,4,3,6,7]'
    Utilizza il metodo carichi() dalla libreria json per analizzare la stringa come un array JSON, ottenendo come risultato l'elenco [1, 4, 3, 6, 7]
  4. Assegna l'elenco risultante a new_list
  5. Stampa la stringa Lista modificata è: seguita dalla rappresentazione della stringa 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>

>

>

Produzione

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

La complessità temporale: O(n), dove n è la lunghezza di test_list. Questo perché il metodo join() impiega O(n) tempo per concatenare le stringhe e il metodo carichi() impiega O(n) tempo per analizzare la stringa risultante.

La complessità dello spazio: O(n), poiché l'elenco risultante occupa O(n) spazio in memoria.

Conversione di tutte le stringhe nell'elenco in numeri interi utilizzando il modulo re

Algoritmo passo-passo per l'approccio delle espressioni regolari per estrarre valori numerici da un elenco di stringhe

stringa in Java booleano
  1. Definire un elenco di stringhe di input.
  2. Definire un modello di espressione regolare per far corrispondere i valori numerici nelle stringhe.
  3. Inizializza un elenco vuoto per memorizzare i valori numerici convertiti.
  4. Itera su ogni stringa nell'elenco di input.
  5. Utilizza il modello di espressione regolare per cercare un valore numerico nella stringa.
  6. Se viene trovata una corrispondenza, estrai la sottostringa corrispondente e convertila in un float.
  7. Aggiungi il valore convertito all'elenco di output.
  8. Una volta elaborate tutte le stringhe nell'elenco di input, restituisce l'elenco di output.

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)>

>

>

Produzione

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

Complessità temporale: La complessità temporale di questo approccio è O(nm), dove n è il numero di stringhe nell'elenco di input e m è la lunghezza massima di qualsiasi stringa nell'elenco. Il modello di espressione regolare deve essere applicato a ciascuna stringa nell'elenco, che nel caso peggiore richiede tempo O(m). Pertanto, la complessità temporale complessiva è O(nm).
Complessità dello spazio ausiliario: La complessità dello spazio ausiliario di questo approccio è O(k), dove k è il numero di valori numerici nell'elenco di input. Dobbiamo memorizzare ciascun valore numerico convertito nell'elenco di output, che richiede spazio O(k). Inoltre, dobbiamo memorizzare un oggetto espressione regolare, che richiede spazio costante. Pertanto, la complessità complessiva dello spazio ausiliario è O(k).