Python-kirjastot helpottavat tietotyyppien välistä muuntamista melko helposti. Mutta ongelma koko merkkijonoluettelon muuntamisesta kokonaisluvuiksi on melko yleinen kehitysalueella. Keskustellaan muutamista tavoista ratkaista tämä ongelma.
Kaikkien luettelon merkkijonojen muuntaminen kokonaisluvuiksi eval()
Python eval()-funktio jäsentää lausekeargumentin ja arvioida sen python-lausekkeena ja suorittaa Python-lausekkeen(koodin). Jos lauseke on int-esitys, Python muuntaa argumentin kokonaisluvuksi.
Python 3
lis> => [> '1'> ,> '-4'> ,> '3'> ,> '-6'> ,> '7'> ]> res> => [> eval> (i)> for> i> in> lis]> print> (> 'Modified list is: '> , res)> |
>
>
leksikografinen järjestys
Lähtö:
Modified list is: [1, -4, 3, -6, 7]>
Kaikkien luettelon merkkijonojen muuntaminen kokonaisluvuiksi Naiivi menetelmä
Tämä on yleisin menetelmä, joka osuu mihin tahansa ohjelmoijaan suorittaessaan tällaista toimintaa. Silmukoi vain koko luettelo ja muunna luettelon jokainen merkkijono int-muotoon tyypin valun mukaan.
Python 3
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))> |
>
>
Lähtö:
Modified list is: [1, 4, 3, 6, 7]>
Kaikkien luettelon merkkijonojen muuntaminen kokonaisluvuiksi Käyttämällä listan ymmärtäminen
Tämä on vain eräänlainen kopio yllä olevasta menetelmästä, vain toteutettu luettelon ymmärtämisellä, eräänlainen lyhenne, jota kehittäjä etsii aina. Se säästää aikaa ja ratkaisun koodaamisen monimutkaisuutta.
Python 3
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))> |
>
>
Lähtö:
Modified list is : [1, 4, 3, 6, 7]>
Kaikkien luettelon merkkijonojen muuntaminen kokonaisluvuiksi Käyttämällä kartta()
Tämä on tyylikkäin, pytonisin ja suositeltavin menetelmä tämän tehtävän suorittamiseen. Tämä toiminto on tarkoitettu yksinomaan tämän tyyppisiin tehtäviin, ja sitä tulisi käyttää niiden suorittamiseen.
Python 3
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))> |
>
>
Lähtö:
Modified list is : [1, 4, 3, 6, 7]>
Kaikkien luettelon merkkijonojen muuntaminen kokonaisluvuiksi Luettelo merkkijonoista, joissa on sekoitettuja kokonaislukuesityksiä
Täällä muunnetaan ensin jokainen merkkijono floatiksi ja sitten se kokonaisluvuksi round()-funktiolla, muuten se antaa virheen.
Python 3
lis> => [> '1.1'> ,> '4'> ,> '3.5'> ,> '6.7'> ,> '7.2'> ]> res> => [> round> (> float> (i))> for> i> in> lis]> print> (> 'Modified list is: '> , res)> |
>
>
Lähtö:
Modified list is: [1, 4, 4, 7, 7]>
Kaikkien luettelon merkkijonojen muuntaminen kokonaisluvuiksi Ast-moduulin ast.literal_eval()-funktion käyttäminen
Toinen tapa, jolla merkkijonoluettelo voidaan muuntaa kokonaislukuluetteloksi, on käyttää ast.literal_eval()-funktiota ast-moduulista. Tämän toiminnon avulla voit arvioida merkkijonon Python-literaalina, mikä tarkoittaa, että se voi jäsentää ja arvioida merkkijonoja, jotka sisältävät Python-lausekkeita, kuten numeroita, luetteloita, sanakirjoja jne.
Tässä on esimerkki ast.literal_eval():n avulla merkkijonoluettelon muuntamiseen kokonaislukuluetteloksi:
Python 3
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> |
>
>Lähtö
Modified list: [1, 4, 3, 6, 7]>
Ast.literal_eval()-funktion käyttäminen ast-moduulista merkkijonoluettelon muuntamiseen kokonaislukuluetteloksi on O(n), jossa n on luettelon pituus. Tämä tarkoittaa, että tämän lähestymistavan suorittamiseen tarvittava aika on suoraan verrannollinen syöttöluettelon kokoon.
Avaruuden monimutkaisuuden kannalta tämän lähestymistavan avaruuden monimutkaisuus on O(n), koska se luo uuden luettelon kokonaisluvuista, joka on samankokoinen kuin syöteluettelo.
Listan kaikkien merkkijonojen muuntaminen kokonaisluvuiksi Numpy.array()-funktion käyttäminen
- Määritä merkkijonoluettelo
- Muunna luettelo numpy-taulukoksi, jonka tyyppi on int, käyttämällä numpy.array()-funktiota
- Muunna numpy-taulukko takaisin luetteloksi käyttämällä lista()-funktio
- Tulosta muokattu luettelo
Python 3
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)> |
>
>
Lähtö:
Modified list is: [1, 4, 3, 6, 7]>
Aika monimutkaisuus: Tämän lähestymistavan aikamonimutkaisuus on O(n), jossa n on listan pituus. Funktiolla numpy.array() kuluu O(n) aikaa uuden taulukon luomiseen ja list()-funktiolla O(n) aikaa taulukon muuntamiseen takaisin listaksi.
Tilan monimutkaisuus: Tämän lähestymistavan avaruuden monimutkaisuus on O(n), koska se luo uuden int-tyypin numpy-taulukon, joka on samankokoinen kuin syöteluettelo.
Lähestymistapa: json.loads()-funktion käyttäminen:
Algoritmi:
- Luo luettelo merkkijonoista test_list arvoilla ['1', '4', '3', '6', '7']
- Käytä join()-metodia liittääksesi merkkijonot test_listissa pilkuilla, jolloin saadaan merkkijono '1,4,3,6,7'
- Lisää hakasulkeet tuloksena olevan merkkijonon ympärille, jolloin saadaan merkkijono [1,4,3,6,7]
Käytä loads()-metodia json-kirjastosta jäsentääksesi merkkijonon JSON-taulukkona, jolloin saadaan luettelo [1, 4, 3, 6, 7] - Määritä tuloksena oleva luettelo kohtaan new_list
- Tulosta merkkijono Muokattu lista on : ja sen jälkeen merkkijonoesitys new_list
Python 3
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> |
>
>Lähtö
Modified list is : [1, 4, 3, 6, 7]>
Aika monimutkaisuus: O(n), missä n on testiluettelon pituus. Tämä johtuu siitä, että join()-metodilla menee O(n) aikaa merkkijonojen ketjuttamiseen ja loads()-metodilla O(n) aikaa jäsentää tuloksena oleva merkkijono.
Tilan monimutkaisuus: O(n), koska tuloksena oleva lista vie O(n) tilaa muistista.
Kaikkien luettelon merkkijonojen muuntaminen kokonaisluvuiksi käyttämällä re-moduulia
vaiheittainen algoritmi säännöllisen lausekkeen lähestymistapaa varten numeroarvojen poimimiseksi merkkijonoluettelosta
miten saan selville näytöni koon
- Määritä merkkijonojen syöteluettelo.
- Määritä säännöllinen lausekemalli vastaamaan merkkijonojen numeerisia arvoja.
- Alusta tyhjä lista tallentaaksesi muunnetut numeroarvot.
- Toista jokaista merkkijonoa syöttöluettelossa.
- Käytä säännöllistä lauseketta etsiäksesi numeroarvoa merkkijonosta.
- Jos vastaavuus löytyy, pura vastaava osamerkkijono ja muunna se floatiksi.
- Liitä muunnettu arvo tulosluetteloon.
- Kun kaikki syöttöluettelon merkkijonot on käsitelty, palauta tulosluettelo.
Python 3
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)> |
>
>Lähtö
Modified list is: [1, -4, 3, -6, 7]>
Aika monimutkaisuus: Tämän lähestymistavan aikamonimutkaisuus on O(nm), jossa n on merkkijonojen lukumäärä syöttöluettelossa ja m on minkä tahansa luettelon merkkijonon enimmäispituus. Säännöllisen lausekkeen mallia on sovellettava jokaiseen luettelon merkkijonoon, mikä kestää pahimmassa tapauksessa O(m) aikaa. Siksi kokonaisaika monimutkaisuus on O(nm).
Aputilan monimutkaisuus: Tämän lähestymistavan aputilan monimutkaisuus on O(k), jossa k on syöteluettelon numeeristen arvojen lukumäärä. Meidän on tallennettava jokainen muunnettu numeerinen arvo tulosluetteloon, mikä vaatii O(k)-tilan. Lisäksi meidän on tallennettava säännöllinen lausekeobjekti, joka vaatii jatkuvaa tilaa. Siksi aputilan kokonaiskompleksisuus on O(k).