logo

Python | Prevod všetkých reťazcov v zozname na celé čísla

Vzájomnú konverziu medzi dátovými typmi uľahčujú knižnice pythonu pomerne jednoducho. Ale problém s prevodom celého zoznamu reťazcov na celé čísla je vo vývojovej doméne celkom bežný. Poďme diskutovať o niekoľkých spôsoboch, ako vyriešiť tento konkrétny problém.

Konverzia všetkých reťazcov v zozname na celé čísla pomocou eval()

Funkcia eval() v Pythone analyzovať argument výrazu a vyhodnotiť ho ako výraz pythonu a spustiť výraz (kód) jazyka Python. Ak je výraz reprezentáciou typu int, Python skonvertuje argument na celé číslo.



Python3








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

>

>

python programy

Výkon:

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

Prevod všetkých reťazcov v zozname na celé čísla Naivná metóda

Toto je najvšeobecnejšia metóda, ktorá postihne každého programátora pri vykonávaní tohto druhu operácie. Stačí prechádzať celým zoznamom a konvertovať každý reťazec zoznamu na int podľa typu 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))>

>

>

Výkon:

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

Prevod všetkých reťazcov v zozname na celé čísla Pomocou porozumenie zoznamu

Toto je len akási replika vyššie uvedenej metódy, práve implementovaná pomocou porozumenia zoznamu, čo je druh skratky, ktorú vývojár vždy hľadá. Šetrí čas a zložitosť kódovania riešenia.

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

>

>

Výkon:

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

Prevod všetkých reťazcov v zozname na celé čísla Pomocou mapa()

Toto je najelegantnejšia, pythonická a odporúčaná metóda na vykonanie tejto konkrétnej úlohy. Táto funkcia je určená výhradne pre tento druh úloh a mala by sa používať na ich vykonávanie.

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

>

>

Výkon:

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

Konverzia všetkých reťazcov v zozname na celé čísla Zoznam reťazcov so zmiešanými celočíselnými reprezentáciami

Tu najprv skonvertujeme každý reťazec na float a potom ho prevedieme na celé číslo pomocou funkcie round(), inak vyvolá chybu.

Python3




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

>

>

Výkon:

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

Konverzia všetkých reťazcov v zozname na celé čísla pomocou funkcie ast.literal_eval() z modulu ast

Ďalší prístup, ktorý možno použiť na konverziu zoznamu reťazcov na zoznam celých čísel, je použitie funkcie ast.literal_eval() z modulu ast. Táto funkcia vám umožňuje vyhodnotiť reťazec ako literál Pythonu, čo znamená, že dokáže analyzovať a vyhodnotiť reťazce, ktoré obsahujú výrazy jazyka Python, ako sú čísla, zoznamy, slovníky atď.

Tu je príklad, ako použiť ast.literal_eval() na konverziu zoznamu reťazcov na zoznam celých čísel:

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>

>

>

Výkon

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

Časová zložitosť použitia funkcie ast.literal_eval() z modulu ast na konverziu zoznamu reťazcov na zoznam celých čísel je O(n), kde n je dĺžka zoznamu. To znamená, že čas potrebný na vykonanie tohto prístupu je priamo úmerný veľkosti zoznamu vstupov.

Z hľadiska priestorovej zložitosti má tento prístup priestorovú zložitosť O(n), pretože vytvára nový zoznam celých čísel, ktorý má rovnakú veľkosť ako vstupný zoznam.

Konverzia všetkých reťazcov v zozname na celé čísla Pomocou funkcie numpy.array().

  1. Definujte zoznam reťazcov
  2. Skonvertujte zoznam na numpy pole typu int pomocou funkcie numpy.array().
  3. Preveďte numpy pole späť na zoznam pomocou funkcia list().
  4. Vytlačte upravený zoznam

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

>

>

Výkon:

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

Časová zložitosť: Časová zložitosť tohto prístupu je O(n), kde n je dĺžka zoznamu. Funkcii numpy.array() trvá O(n) čas na vytvorenie nového poľa a funkcii list() trvá O(n) čas, kým prevedie pole späť na zoznam.

Priestorová zložitosť: Priestorová zložitosť tohto prístupu je O(n), pretože vytvára nové numpy pole typu int, ktoré má rovnakú veľkosť ako zoznam vstupov.

Prístup: Pomocou funkcie json.loads():

Algoritmus:

  1. Vytvorte zoznam reťazcov test_list s hodnotami [‘1‘, ‚4‘, ‚3‘, ‚6‘, ‚7‘]
  2. Použite metódu join() na spojenie reťazcov v test_list spolu s čiarkami, výsledkom čoho je reťazec „1,4,3,6,7“
  3. Pridajte hranaté zátvorky okolo výsledného reťazca, výsledkom čoho bude reťazec „[1,4,3,6,7]“
    Pomocou metódy loads() z knižnice json analyzujte reťazec ako pole JSON, výsledkom čoho je zoznam [1, 4, 3, 6, 7]
  4. Výsledný zoznam priraďte k new_list
  5. Vytlačte reťazec Modifikovaný zoznam je : nasledovaný reťazcovou reprezentáciou nového_zoznamu

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>

>

>

Výkon

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

Časová zložitosť: O(n), kde n je dĺžka zoznamu testov. Je to preto, že metóde join() potrebuje čas O(n) na zreťazenie reťazcov a metóde loads() čas O(n) na analýzu výsledného reťazca.

Zložitosť priestoru: O(n), keďže výsledný zoznam zaberá O(n) miesta v pamäti.

Konverzia všetkých reťazcov v zozname na celé čísla pomocou modulu re

krok za krokom algoritmus pre prístup regulárneho výrazu na extrahovanie číselných hodnôt zo zoznamu reťazcov

vytvorenie spustiteľného skriptu shellu
  1. Definujte vstupný zoznam reťazcov.
  2. Definujte vzor regulárneho výrazu tak, aby sa zhodoval s číselnými hodnotami v reťazcoch.
  3. Inicializujte prázdny zoznam na uloženie prevedených číselných hodnôt.
  4. Iterujte každý reťazec v zozname vstupov.
  5. Na vyhľadanie číselnej hodnoty v reťazci použite vzor regulárneho výrazu.
  6. Ak sa nájde zhoda, extrahujte zhodný podreťazec a skonvertujte ho na float.
  7. Pripojte skonvertovanú hodnotu do zoznamu výstupov.
  8. Po spracovaní všetkých reťazcov vo vstupnom zozname vráťte výstupný zoznam.

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

>

>

Výkon

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

Časová zložitosť: Časová zložitosť tohto prístupu je O(nm), kde n je počet reťazcov vo vstupnom zozname a m je maximálna dĺžka ľubovoľného reťazca v zozname. Vzor regulárneho výrazu je potrebné aplikovať na každý reťazec v zozname, čo v najhoršom prípade trvá O(m) čas. Celková časová zložitosť je teda 0 (nm).
Zložitosť pomocného priestoru: Pomocná priestorová zložitosť tohto prístupu je O(k), kde k je počet číselných hodnôt vo vstupnom zozname. Každú prevedenú číselnú hodnotu musíme uložiť do výstupného zoznamu, čo si vyžaduje O(k) priestor. Okrem toho musíme uložiť objekt regulárneho výrazu, ktorý vyžaduje konštantný priestor. Preto je celková zložitosť pomocného priestoru O(k).