Duomenų tipų tarpusavio konvertavimą python bibliotekos palengvina gana lengvai. Tačiau viso eilučių sąrašo konvertavimo į sveikuosius skaičius problema yra gana dažna kūrimo srityje. Aptarkime keletą šios konkrečios problemos sprendimo būdų.
Visų sąrašo eilučių konvertavimas į sveikuosius skaičius Naudojant eval()
Python eval() funkcija išanalizuoti išraiškos argumentą ir įvertinti jį kaip python išraišką ir paleisti Python išraišką (kodas). Jei išraiška yra int atvaizdas, Python konvertuoja argumentą į sveikąjį skaičių.
Python3
lis>=> [>'1'>,>'-4'>,>'3'>,>'-6'>,>'7'>]> res>=> [>eval>(i)>for> i>in> lis]> print>(>'Modified list is: '>, res)> |
>
>
Java išimtys
Išvestis:
Modified list is: [1, -4, 3, -6, 7]>
Visų sąraše esančių eilučių konvertavimas į sveikuosius skaičius Naivus metodas
Tai yra pats bendriausias metodas, kuris užklumpa bet kurį programuotoją atliekant tokią operaciją. Tiesiog peržiūrėkite visą sąrašą ir konvertuokite kiekvieną sąrašo eilutę į int pagal tipo liejimą.
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))> |
>
>
Išvestis:
Modified list is: [1, 4, 3, 6, 7]>
Visų sąrašo eilučių konvertavimas į sveikuosius skaičius Naudojant sąrašo supratimas
Tai tik tam tikra aukščiau pateikto metodo kopija, tiesiog įdiegta naudojant sąrašo supratimą, tam tikrą trumpinį, kurio kūrėjas visada ieško. Tai sutaupo laiko ir sudėtingumo koduojant sprendimą.
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))> |
>
>
Išvestis:
Modified list is : [1, 4, 3, 6, 7]>
Visų sąrašo eilučių konvertavimas į sveikuosius skaičius Naudojant žemėlapis ()
Tai pats elegantiškiausias, pytoniškiausias ir rekomenduojamas būdas atlikti šią konkrečią užduotį. Ši funkcija skirta tik tokio pobūdžio užduotims ir turėtų būti naudojama joms atlikti.
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))> |
>
>
Išvestis:
Modified list is : [1, 4, 3, 6, 7]>
Visų sąrašo eilučių konvertavimas į sveikuosius skaičius Eilučių su mišriomis sveikųjų skaičių vaizdinėmis sąrašas
Pirmiausia kiekvieną eilutę konvertuosime į plūduriuojančią eilutę, o tada konvertuosime į sveikąjį skaičių naudodami funkciją round(), kitaip bus padaryta klaida.
Python3
lis>=> [>'1.1'>,>'4'>,>'3.5'>,>'6.7'>,>'7.2'>]> res>=> [>round>(>float>(i))>for> i>in> lis]> print>(>'Modified list is: '>, res)> |
>
>
Išvestis:
Modified list is: [1, 4, 4, 7, 7]>
Visų sąrašo eilučių konvertavimas į sveikuosius skaičius Naudojant funkciją ast.literal_eval() iš ast modulio
Kitas būdas, kurį galima naudoti konvertuojant eilučių sąrašą į sveikųjų skaičių sąrašą, yra ast modulio funkcijos ast.literal_eval() naudojimas. Ši funkcija leidžia įvertinti eilutę kaip Python literalą, o tai reiškia, kad ji gali išanalizuoti ir įvertinti eilutes, kuriose yra Python išraiškų, tokių kaip skaičiai, sąrašai, žodynai ir kt.
Štai pavyzdys, kaip naudoti ast.literal_eval(), norint konvertuoti eilučių sąrašą į sveikųjų skaičių sąrašą:
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> |
>
>Išvestis
Modified list: [1, 4, 3, 6, 7]>
Ast modulio funkcijos ast.literal_eval() naudojimo sudėtingumas, norint konvertuoti eilučių sąrašą į sveikųjų skaičių sąrašą, yra O(n), kur n yra sąrašo ilgis. Tai reiškia, kad laikas, reikalingas šiam metodui atlikti, yra tiesiogiai proporcingas įvesties sąrašo dydžiui.
Kalbant apie erdvės sudėtingumą, šio metodo erdvės sudėtingumas yra O(n), nes sukuriamas naujas sveikųjų skaičių sąrašas, kurio dydis yra toks pat kaip įvesties sąrašas.
Visų sąrašo eilučių konvertavimas į sveikuosius skaičius Naudojant numpy.array() funkciją
- Apibrėžkite eilučių sąrašą
- Naudodami funkciją numpy.array() konvertuokite sąrašą į int tipo numpy masyvą
- Konvertuokite numpy masyvą atgal į sąrašą naudodami list() funkcija
- Spausdinkite pakeistą sąrašą
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)> |
>
>
Išvestis:
Modified list is: [1, 4, 3, 6, 7]>
Laiko sudėtingumas: šio metodo laiko sudėtingumas yra O(n), kur n yra sąrašo ilgis. Funkcijai numpy.array() reikia O(n) laiko sukurti naują masyvą, o funkcijai list() užtrunka O(n) laiko masyvui paversti atgal į sąrašą.
Erdvės sudėtingumas: šio metodo erdvės sudėtingumas yra O(n), nes sukuriamas naujas int tipo masyvas, kurio dydis yra toks pat kaip įvesties sąrašas.
Metodas: naudojant json.loads() funkciją:
Algoritmas:
- Sukurkite eilučių test_list sąrašą su reikšmėmis ['1', '4', '3', '6', '7']
- Naudokite join() metodą, norėdami sujungti test_list eilutes kartu su kableliais ir gauti eilutę „1,4,3,6,7“
- Aplink gautą eilutę pridėkite laužtinius skliaustus, kad gautumėte eilutę „[1,4,3,6,7]“
Naudokite metodą loads() iš json bibliotekos, kad analizuotumėte eilutę kaip JSON masyvą ir gautumėte sąrašą [1, 4, 3, 6, 7] - Gautą sąrašą priskirkite new_list
- Spausdinti eilutę Modifikuotas sąrašas yra :, po kurio seka naujo_sąrašo eilutė
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> |
>
>Išvestis
Modified list is : [1, 4, 3, 6, 7]>
Laiko sudėtingumas: O(n), kur n yra test_list ilgis. Taip yra todėl, kad metodas prisijungimas () užtrunka O (n) laiko, kad sujungtų eilutes, o metodas loads () užtrunka O (n) laiko, kad išanalizuoti gautą eilutę.
Erdvės sudėtingumas: O(n), nes gautas sąrašas užima O(n) vietos atmintyje.
Visos sąrašo eilutės konvertuojamos į sveikuosius skaičius naudojant modulį re
Žingsnis po žingsnio algoritmas, skirtas reguliariosios išraiškos metodui, norint išskirti skaitines reikšmes iš eilučių sąrašo
įvesti eilutę Java
- Apibrėžkite įvesties eilučių sąrašą.
- Apibrėžkite reguliariosios išraiškos šabloną, kad jis atitiktų eilučių skaitines reikšmes.
- Inicijuokite tuščią sąrašą, kad išsaugotumėte konvertuotas skaitines reikšmes.
- Pakartokite kiekvieną eilutę įvesties sąraše.
- Norėdami ieškoti skaitinės reikšmės eilutėje, naudokite reguliariosios išraiškos šabloną.
- Jei randama atitiktis, išskleiskite suderintą poeilelę ir konvertuokite ją į plūduriuojančią eilutę.
- Konvertuotą vertę pridėkite prie išvesties sąrašo.
- Kai visos įvesties sąrašo eilutės bus apdorotos, grąžinkite išvesties sąrašą.
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)> |
>
>Išvestis
Modified list is: [1, -4, 3, -6, 7]>
Laiko sudėtingumas: Šio metodo sudėtingumas laike yra O(nm), kur n yra eilučių skaičius įvesties sąraše, o m yra didžiausias bet kurios sąrašo eilutės ilgis. Reguliariosios išraiškos šabloną reikia taikyti kiekvienai sąrašo eilutei, o tai užtrunka O(m) laiko blogiausiu atveju. Todėl bendras laiko sudėtingumas yra O (nm).
Pagalbinės erdvės sudėtingumas: Šio metodo pagalbinės erdvės sudėtingumas yra O(k), kur k yra skaitinių reikšmių skaičius įvesties sąraše. Kiekvieną konvertuotą skaitinę reikšmę turime išsaugoti išvesties sąraše, kuriam reikia O(k) vietos. Be to, turime saugoti reguliariosios išraiškos objektą, kuriam reikia nuolatinės vietos. Todėl bendras pagalbinės erdvės sudėtingumas yra O (k).