logo

Python | Conversia tuturor șirurilor din listă în numere întregi

Interconversia dintre tipurile de date este facilitată de bibliotecile Python destul de ușor. Dar problema conversiei întregii liste de șiruri în numere întregi este destul de comună în domeniul dezvoltării. Să discutăm câteva modalități de a rezolva această problemă specială.

Conversia tuturor șirurilor din listă în numere întregi folosind eval()

Funcția Python eval(). analizați argumentul expresiei și evaluați-l ca o expresie Python și rulează Python expression(code), Dacă expresia este o reprezentare int, Python convertește argumentul într-un număr întreg.



Python3








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

>

>

turnat în sql

Ieșire:

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

Conversia tuturor șirurilor din listă în numere întregi Metoda naivă

Aceasta este metoda cea mai generică care lovește orice programator în timp ce efectuează acest tip de operație. Doar treceți în buclă peste întreaga listă și convertiți fiecare șir al listei în int prin tip 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))>

>

>

Ieșire:

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

Conversia tuturor șirurilor din listă în numere întregi Folosind înțelegerea listei

Acesta este doar un fel de replică a metodei de mai sus, doar implementat folosind lista de înțelegere, un fel de prescurtare pe care un dezvoltator îl caută mereu. Economisește timpul și complexitatea codificării unei soluții.

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

>

>

Ieșire:

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

Conversia tuturor șirurilor din listă în numere întregi Folosind Hartă()

Aceasta este metoda cea mai elegantă, pitonică și recomandată pentru a îndeplini această sarcină specială. Această funcție este creată exclusiv pentru acest tip de sarcină și ar trebui utilizată pentru a le îndeplini.

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

>

>

Ieșire:

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

Conversia tuturor șirurilor din listă în numere întregi Listă de șiruri de caractere cu reprezentări întregi mixte

Aici, mai întâi vom converti fiecare șir într-un float și apoi îl vom converti într-un număr întreg folosind funcția round(), altfel, va genera eroare.

Python3




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

>

>

Ieșire:

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

Conversia tuturor șirurilor din listă în numere întregi Folosind funcția ast.literal_eval() din modulul ast

O altă abordare care poate fi folosită pentru a converti o listă de șiruri de caractere într-o listă de numere întregi este utilizarea funcției ast.literal_eval() din modulul ast. Această funcție vă permite să evaluați un șir ca un literal Python, ceea ce înseamnă că poate analiza și evalua șiruri care conțin expresii Python, cum ar fi numere, liste, dicționare etc.

Iată un exemplu despre cum să utilizați ast.literal_eval() pentru a converti o listă de șiruri de caractere într-o listă de numere întregi:

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>

>

>

Ieșire

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

Complexitatea de timp a utilizării funcției ast.literal_eval() din modulul ast pentru a converti o listă de șiruri de caractere într-o listă de numere întregi este O(n), unde n este lungimea listei. Aceasta înseamnă că timpul necesar pentru a executa această abordare este direct proporțional cu dimensiunea listei de intrare.

În ceea ce privește complexitatea spațiului, această abordare are o complexitate spațială de O(n), deoarece creează o nouă listă de numere întregi care are aceeași dimensiune cu lista de intrare.

Conversia tuturor șirurilor din listă în numere întregi Folosind funcția numpy.array().

  1. Definiți o listă de șiruri
  2. Convertiți lista într-o matrice numpy de tip int folosind funcția numpy.array().
  3. Convertiți matricea numpy înapoi într-o listă folosind funcția list().
  4. Tipăriți lista modificată

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

>

>

Ieșire:

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

Complexitatea în timp: complexitatea în timp a acestei abordări este O(n), unde n este lungimea listei. Funcția numpy.array() durează O(n) timp pentru a crea o nouă matrice, iar funcția list() are nevoie de O(n) timp pentru a converti matricea înapoi într-o listă.

Complexitatea spațiului: complexitatea spațială a acestei abordări este O(n), deoarece creează o nouă matrice numpy de tip int care are aceeași dimensiune cu lista de intrare.

Abordare: Folosind funcția json.loads():

Algoritm:

  1. Creați o listă de șiruri test_list cu valorile [‘1’, ‘4’, ‘3’, ‘6’, ‘7’]
  2. Utilizați metoda join() pentru a uni șirurile din lista_test împreună cu virgule, rezultând șirul „1,4,3,6,7”
  3. Adăugați paranteze pătrate în jurul șirului rezultat, rezultând șirul „[1,4,3,6,7]”
    Utilizați metoda loads() din biblioteca json pentru a analiza șirul ca o matrice JSON, rezultând lista [1, 4, 3, 6, 7]
  4. Atribuiți lista rezultată la new_list
  5. Tipăriți șirul Lista modificată este : urmată de reprezentarea șirului de listă_nouă

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>

>

>

Ieșire

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

Complexitatea timpului: O(n), unde n este lungimea listei_test. Acest lucru se datorează faptului că metoda join() ia timp O(n) pentru a concatena șirurile, iar metoda loads() necesită timp O(n) pentru a analiza șirul rezultat.

Complexitatea spațiului: O(n), deoarece lista rezultată ocupă spațiu O(n) în memorie.

Conversia tuturor șirurilor din listă în numere întregi folosind re module

algoritm pas cu pas pentru abordarea expresiei regulate pentru a extrage valori numerice dintr-o listă de șiruri de caractere

convertește int în java dublu
  1. Definiți o listă de șiruri de caractere de intrare.
  2. Definiți un model de expresie regulată pentru a se potrivi cu valorile numerice din șiruri.
  3. Inițializați o listă goală pentru a stoca valorile numerice convertite.
  4. Iterați peste fiecare șir din lista de intrare.
  5. Utilizați modelul expresiei regulate pentru a căuta o valoare numerică în șir.
  6. Dacă se găsește o potrivire, extrageți subșirul potrivit și convertiți-l într-un float.
  7. Adăugați valoarea convertită la lista de ieșiri.
  8. Odată ce toate șirurile din lista de intrare au fost procesate, returnați lista de ieșire.

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

>

>

Ieșire

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

Complexitatea timpului: Complexitatea de timp a acestei abordări este O(nm), unde n este numărul de șiruri din lista de intrare și m este lungimea maximă a oricărui șir din listă. Modelul de expresie regulată trebuie aplicat fiecărui șir din listă, ceea ce necesită timp O(m) în cel mai rău caz. Prin urmare, complexitatea generală a timpului este O(nm).
Complexitatea spațiului auxiliar: Complexitatea spațiului auxiliar al acestei abordări este O(k), unde k este numărul de valori numerice din lista de intrare. Trebuie să stocăm fiecare valoare numerică convertită în lista de ieșire, care necesită spațiu O(k). În plus, trebuie să stocăm un obiect cu expresie regulată, care necesită spațiu constant. Prin urmare, complexitatea generală a spațiului auxiliar este O(k).