logo

Python | Převod všech řetězců v seznamu na celá čísla

Vzájemnou konverzi mezi datovými typy usnadňují knihovny pythonu poměrně snadno. Ale problém převodu celého seznamu řetězců na celá čísla je ve vývojové doméně docela běžný. Pojďme diskutovat o několika způsobech řešení tohoto konkrétního problému.

Převod všech řetězců v seznamu na celá čísla pomocí eval()

Funkce eval() v Pythonu analyzovat argument výrazu a vyhodnotit jej jako výraz pythonu a spustit výraz (kód) jazyka Python. Pokud je výraz reprezentací typu int, Python převede argument na celé číslo.



Python3








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

>

>

bourne-again shell

Výstup:

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

Převod všech řetězců v seznamu na celá čísla Naivní metoda

Toto je nejobecnější metoda, která zasáhne každého programátora při provádění tohoto druhu operace. Stačí procházet celý seznam a převádět každý řetězec seznamu na int podle 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ýstup:

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

Převod všech řetězců v seznamu na celá čísla Použití porozumění seznamu

Toto je jen jakási replika výše uvedené metody, právě implementovaná pomocí porozumění seznamu, jakési zkratky, kterou vývojář vždy hledá. Šetří čas a složitost kódování řešení.

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ýstup:

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

Převod všech řetězců v seznamu na celá čísla Použití mapa()

Toto je nejelegantnější, pythonic a doporučená metoda k provedení tohoto konkrétního úkolu. Tato funkce je určena výhradně pro tento druh úkolů a měla by se používat k jejich provádění.

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ýstup:

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

Převod všech řetězců v seznamu na celá čísla Seznam řetězců se smíšenými celočíselnými reprezentacemi

Zde nejprve převedeme každý řetězec na float a poté jej převedeme na celé číslo pomocí funkce round(), jinak 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ýstup:

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

Převod všech řetězců v seznamu na celá čísla Pomocí funkce ast.literal_eval() z modulu ast

Dalším přístupem, který lze použít k převodu seznamu řetězců na seznam celých čísel, je použití funkce ast.literal_eval() z modulu ast. Tato funkce umožňuje vyhodnotit řetězec jako literál Pythonu, což znamená, že může analyzovat a vyhodnocovat řetězce, které obsahují výrazy Pythonu, jako jsou čísla, seznamy, slovníky atd.

Zde je příklad, jak použít ast.literal_eval() k převodu seznamu řetězců na seznam 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ýstup

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

Časová složitost použití funkce ast.literal_eval() z modulu ast k převodu seznamu řetězců na seznam celých čísel je O(n), kde n je délka seznamu. To znamená, že čas potřebný k provedení tohoto přístupu je přímo úměrný velikosti vstupního seznamu.

Z hlediska prostorové složitosti má tento přístup prostorovou složitost O(n), protože vytváří nový seznam celých čísel, který má stejnou velikost jako vstupní seznam.

Převod všech řetězců v seznamu na celá čísla Pomocí funkce numpy.array().

  1. Definujte seznam řetězců
  2. Převeďte seznam na numpy pole typu int pomocí funkce numpy.array().
  3. Převeďte numpy pole zpět na seznam pomocí funkce list().
  4. Vytiskněte upravený seznam

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ýstup:

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

Časová složitost: Časová složitost tohoto přístupu je O(n), kde n je délka seznamu. Funkce numpy.array() potřebuje čas O(n) k vytvoření nového pole a funkci list() trvá O(n) čas, než pole převede zpět na seznam.

Prostorová složitost: Prostorová složitost tohoto přístupu je O(n), protože vytváří nové numpy pole typu int, které má stejnou velikost jako vstupní seznam.

Přístup: Pomocí funkce json.loads():

Algoritmus:

  1. Vytvořte seznam řetězců test_list s hodnotami [‘1‘, ‚4‘, ‚3‘, ‚6‘, ‚7‘]
  2. Použijte metodu join() ke spojení řetězců v test_list spolu s čárkami, výsledkem je řetězec ‚1,4,3,6,7‘
  3. Přidejte hranaté závorky kolem výsledného řetězce, výsledkem je řetězec „[1,4,3,6,7]“
    Pomocí metody loads() z knihovny json analyzujte řetězec jako pole JSON, výsledkem je seznam [1, 4, 3, 6, 7]
  4. Výsledný seznam přiřaďte k new_list
  5. Vytisknout řetězec Upravený seznam je : následovaný řetězcem reprezentace nového_seznamu

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ýstup

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

Časová složitost: O(n), kde n je délka seznamu testů. Je to proto, že metodě join() trvá O(n) čas, než zřetězí řetězce, a metodě loads() trvá O(n) čas, než analyzuje výsledný řetězec.

Prostorová složitost: O(n), protože výsledný seznam zabírá O(n) místa v paměti.

Převod všech řetězců v seznamu na celá čísla pomocí modulu re

krok za krokem algoritmus pro přístup s regulárním výrazem pro extrakci číselných hodnot ze seznamu řetězců

příklady nfa
  1. Definujte vstupní seznam řetězců.
  2. Definujte vzor regulárního výrazu, aby odpovídal číselným hodnotám v řetězcích.
  3. Inicializujte prázdný seznam pro uložení převedených číselných hodnot.
  4. Iterujte každý řetězec ve vstupním seznamu.
  5. Použijte vzor regulárního výrazu k vyhledání číselné hodnoty v řetězci.
  6. Pokud je nalezena shoda, extrahujte odpovídající podřetězec a převeďte jej na plovoucí.
  7. Připojte převedenou hodnotu k seznamu výstupů.
  8. Po zpracování všech řetězců ve vstupním seznamu vraťte výstupní seznam.

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ýstup

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

Časová složitost: Časová složitost tohoto přístupu je O(nm), kde n je počet řetězců ve vstupním seznamu a m je maximální délka libovolného řetězce v seznamu. Vzor regulárního výrazu je třeba aplikovat na každý řetězec v seznamu, což v nejhorším případě trvá O(m) čas. Celková časová složitost je tedy O(nm).
Složitost pomocného prostoru: Pomocná prostorová složitost tohoto přístupu je O(k), kde k je počet číselných hodnot ve vstupním seznamu. Potřebujeme uložit každou převedenou číselnou hodnotu do výstupního seznamu, což vyžaduje O(k) prostor. Kromě toho musíme uložit objekt regulárního výrazu, který vyžaduje konstantní prostor. Celková složitost pomocného prostoru je tedy O(k).