Medsebojno pretvorbo med tipi podatkov olajšajo knjižnice python precej enostavno. Toda problem pretvorbe celotnega seznama nizov v cela števila je precej pogost v domeni razvoja. Razpravljajmo o nekaj načinih za rešitev te posebne težave.
Pretvarjanje vseh nizov na seznamu v cela števila z uporabo eval()
Funkcija Python eval(). razčleni argument izraza in ga ovrednoti kot izraz python ter zažene izraz Python(code). Če je izraz predstavitev int, Python pretvori argument v celo število.
Python3
lis> => [> '1'> ,> '-4'> ,> '3'> ,> '-6'> ,> '7'> ]> res> => [> eval> (i)> for> i> in> lis]> print> (> 'Modified list is: '> , res)> |
>
>
vmesnik proti abstraktnemu razredu
Izhod:
Modified list is: [1, -4, 3, -6, 7]>
Pretvarjanje vseh nizov na seznamu v cela števila Naivna metoda
To je najbolj splošna metoda, ki prizadene vsakega programerja med izvajanjem tovrstnih operacij. Samo zanka čez celoten seznam in pretvorba vsakega niza seznama v int s pretvorbo tipa.
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))> |
>
>
Izhod:
Modified list is: [1, 4, 3, 6, 7]>
Pretvarjanje vseh nizov na seznamu v cela števila z uporabo razumevanje seznama
To je samo nekakšna replika zgornje metode, pravkar izvedena z razumevanjem seznama, nekakšna okrajšava, ki jo razvijalec vedno išče. Prihrani čas in kompleksnost kodiranja rešitve.
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))> |
>
>
Izhod:
Modified list is : [1, 4, 3, 6, 7]>
Pretvarjanje vseh nizov na seznamu v cela števila z uporabo zemljevid()
To je najelegantnejša, pitonska in priporočena metoda za izvedbo te posebne naloge. Ta funkcija je narejena izključno za tovrstne naloge in jo je treba uporabiti za njihovo izvajanje.
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))> |
>
>
Izhod:
Modified list is : [1, 4, 3, 6, 7]>
Pretvarjanje vseh nizov na seznamu v cela števila Seznam nizov z mešanimi celoštevilskimi predstavitvami
Tukaj bomo najprej vsak niz pretvorili v vrednost s plavajočo vrednostjo, nato pa ga bomo pretvorili v celo število s funkcijo round(), sicer bo vrgla napako.
Python3
lis> => [> '1.1'> ,> '4'> ,> '3.5'> ,> '6.7'> ,> '7.2'> ]> res> => [> round> (> float> (i))> for> i> in> lis]> print> (> 'Modified list is: '> , res)> |
>
>
Izhod:
Modified list is: [1, 4, 4, 7, 7]>
Pretvarjanje vseh nizov na seznamu v cela števila z uporabo funkcije ast.literal_eval() iz modula ast
Drug pristop, ki ga je mogoče uporabiti za pretvorbo seznama nizov v seznam celih števil, je uporaba funkcije ast.literal_eval() iz modula ast. Ta funkcija vam omogoča, da ocenite niz kot literal Python, kar pomeni, da lahko razčleni in ovrednoti nize, ki vsebujejo izraze Python, kot so števila, seznami, slovarji itd.
Tukaj je primer, kako uporabiti ast.literal_eval() za pretvorbo seznama nizov v seznam celih števil:
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> |
>
>Izhod
Modified list: [1, 4, 3, 6, 7]>
Časovna zapletenost uporabe funkcije ast.literal_eval() iz modula ast za pretvorbo seznama nizov v seznam celih števil je O(n), kjer je n dolžina seznama. To pomeni, da je čas, potreben za izvedbo tega pristopa, neposredno sorazmeren z velikostjo vhodnega seznama.
Kar zadeva prostorsko kompleksnost, ima ta pristop prostorsko kompleksnost O(n), ker ustvari nov seznam celih števil, ki je enake velikosti kot vhodni seznam.
Pretvarjanje vseh nizov na seznamu v cela števila z uporabo funkcije numpy.array().
- Določite seznam nizov
- Pretvorite seznam v matriko numpy tipa int s funkcijo numpy.array().
- Pretvorite matriko numpy nazaj v seznam z uporabo funkcijo list().
- Natisnite spremenjeni 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)> |
>
>
Izhod:
Modified list is: [1, 4, 3, 6, 7]>
Časovna kompleksnost: Časovna kompleksnost tega pristopa je O(n), kjer je n dolžina seznama. Funkcija numpy.array() potrebuje O(n) časa za ustvarjanje nove matrike, funkcija list() pa O(n) časa za pretvorbo matrike nazaj v seznam.
Prostorska kompleksnost: prostorska kompleksnost tega pristopa je O(n), ker ustvari novo matriko numpy tipa int, ki je enake velikosti kot vhodni seznam.
Pristop: Uporaba funkcije json.loads():
Algoritem:
- Ustvarite seznam nizov test_list z vrednostmi ['1', '4', '3', '6', '7']
- Uporabite metodo join(), da združite nize v test_list skupaj z vejicami, kar povzroči niz '1,4,3,6,7'
- Okoli nastalega niza dodajte oglate oklepaje, tako da dobite niz '[1,4,3,6,7]'
Uporabite metodo loads() iz knjižnice json, da razčlenite niz kot matriko JSON, rezultat pa je seznam [1, 4, 3, 6, 7] - Nastali seznam dodelite new_list
- Natisnite niz Spremenjen seznam je : ki mu sledi predstavitev niza 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> |
>
>Izhod
Modified list is : [1, 4, 3, 6, 7]>
Časovna zahtevnost: O(n), kjer je n dolžina seznama testov. To je zato, ker metoda join() potrebuje O(n) časa za združevanje nizov, metoda loads() pa O(n) časa za razčlenitev nastalega niza.
Kompleksnost prostora: O(n), ker nastali seznam zasede O(n) prostora v pomnilniku.
Pretvorba vseh nizov na seznamu v cela števila z uporabo modula re
algoritem po korakih za pristop regularnega izraza za pridobivanje številskih vrednosti s seznama nizov
df.loc
- Določite vhodni seznam nizov.
- Definirajte vzorec regularnega izraza za ujemanje s številskimi vrednostmi v nizih.
- Inicializirajte prazen seznam za shranjevanje pretvorjenih številskih vrednosti.
- Ponovite vsak niz na seznamu vnosov.
- Za iskanje številske vrednosti v nizu uporabite vzorec regularnega izraza.
- Če se najde ujemanje, izvlecite ujemajoči se podniz in ga pretvorite v plavajočo vrednost.
- Pripni pretvorjeno vrednost na izhodni seznam.
- Ko so vsi nizi na vhodnem seznamu obdelani, vrnite izhodni 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)> |
>
>Izhod
Modified list is: [1, -4, 3, -6, 7]>
Časovna zahtevnost: Časovna kompleksnost tega pristopa je O(nm), kjer je n število nizov na vhodnem seznamu in m največja dolžina katerega koli niza na seznamu. Vzorec regularnega izraza je treba uporabiti za vsak niz na seznamu, kar v najslabšem primeru traja O(m) časa. Zato je celotna časovna kompleksnost O(nm).
Kompleksnost pomožnega prostora: Kompleksnost pomožnega prostora tega pristopa je O(k), kjer je k število številskih vrednosti na vhodnem seznamu. Vsako pretvorjeno številsko vrednost moramo shraniti na izhodni seznam, kar zahteva O(k) prostora. Poleg tega moramo shraniti objekt regularnega izraza, ki zahteva stalni prostor. Zato je celotna kompleksnost pomožnega prostora O(k).