logo

Python | Ištraukite skaičius iš eilutės

Daug kartų dirbdami su eilutėmis susiduriame su šia problema, kai turime gauti visus skaitinius įvykius. Tokio tipo problemos paprastai iškyla konkurencinio programavimo ir interneto kūrimo srityse. Pakalbėkime apie tam tikrus šios problemos sprendimo būdus Python .

  Input:   'There are 2 apples for 4 persons'   Output:   [2, 4]   Explanation:   2 and 4 are the only number present in the input string.>

Ištraukite skaičius iš eilutės Python

Žemiau pateikiami metodai, kuriuos aptarsime šiame straipsnyje:

Ištraukite skaičius iš eilutės naudodami sąrašo supratimą ir isdigit () metodas

Šią problemą galima išspręsti naudojant padalijimo funkciją, kuri konvertuoja eilutę į sąrašą ir tada sąrašo supratimas kurie gali padėti mums kartoti sąrašą ir isskaitmuo funkcija padeda ištraukti skaitmenį iš eilutės.



Python3


java end for ciklus



test_string>=> 'There are 2 apples for 4 persons'> # printing original string> print>(>'The original string : '> +> test_string)> # using List comprehension + isdigit() +split()> # getting numbers from string> res>=> [>int>(i)>for> i>in> test_string.split()>if> i.isdigit()]> # print result> print>(>'The numbers list is :'> +> str>(res))>

>

>

Išvestis

The original string : There are 2 apples for 4 persons The numbers list is :[2, 4]>

Laiko sudėtingumas: O(n), kur n yra elementų skaičius įvesties eilutėje.
Pagalbinė erdvė: O(n), kur n yra skaičių skaičius įvesties eilutėje.

Ištraukite skaitmenį iš eilutės naudodami re.findall() metodas

Šią konkrečią problemą taip pat galima išspręsti naudojant Python reguliarioji išraiška, galime naudoti Findall funkcija norėdami patikrinti, ar nėra skaitinių įvykių, naudodami atitinkamą reguliariojo reiškinio eilutę.

Python3




import> re> # initializing string> test_string>=> 'There are 2 apples for 4 persons'> # printing original string> print>(>'The original string : '> +> test_string)> # getting numbers from string> temp>=> re.findall(r>'d+'>, test_string)> res>=> list>(>map>(>int>, temp))> # print result> print>(>'The numbers list is : '> +> str>(res))>

>

>

Išvestis

The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>

Ištraukite Interger iš eilutės naudodami isnumeric() metodą

Python, mes turime isskaitinis funkcija, kuri gali pasakyti vartotojui, ar tam tikras elementas yra skaičius, ar ne, todėl šiuo metodu taip pat galime išskirti skaičių iš eilutės.

Python3




test_string>=> 'There are 2 apples for 4 persons'> # printing original string> print>(>'The original string : '> +> test_string)> # getting numbers from string> res>=> []> x>=>test_string.split()> for> i>in> x:> >if> i.isnumeric():> >res.append(>int>(i))> # print result> print>(>'The numbers list is : '> +> str>(res))>

>

>

Išvestis

The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>

Laiko sudėtingumas: O(N)
Pagalbinė erdvė: O(N)

Ištraukite skaitmenį iš eilutės naudodami funkciją Filter ().

Pirmiausia apibrėžiame įvesties eilutę, tada išspausdiname pradinę eilutę ir padalijame įvesties eilutę į žodžių sąrašą naudodami padalinti () metodas. Naudoti filtras() funkcija filtruoti neskaitinius elementus iš sąrašo, taikant lambda funkcija x .isdigit() į kiekvieną elementą Konvertuokite likusius filtruoto sąrašo elementus į sveikuosius skaičius, naudodami sąrašo supratimą

Išspausdinkite gautą sveikųjų skaičių sąrašą

Python3




test_string>=> 'There are 2 apples for 4 persons'> print>(>'The original string : '> +> test_string)> # use the split() method to split> # use the filter() function to filter out non-numeric elements from the list> res>=> list>(>filter>(>lambda> x: x.isdigit(), test_string.split()))> # use a list comprehension to convert the remaining elements to integers> res>=> [>int>(s)>for> s>in> res]> # print the resulting list of integers> print>(>'The numbers list is : '> +> str>(res))>

>

>

Išvestis

The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>

Laiko sudėtingumas: O(n), kur n yra įvesties eilutės ilgis. Split() metodas užtrunka O(n) laiko, kad įvesties eilutė padalijama į žodžių sąrašą, o funkcijai filtras () užtrunka O(n) laiko, kad pakartotų kiekvieną sąrašo elementą ir pritaikytų lambda funkciją. Sąrašo supratimas užtrunka O(k) laiko, kur k yra filtruoto sąrašo elementų, kurie yra skaitmenys, skaičius, ir tai paprastai yra daug mažesnis nei n. Todėl bendras laiko sudėtingumas yra O (n).

Pagalbinės erdvės sudėtingumas: O(n), nes split() metodas sukuria žodžių sąrašą, kurio ilgis yra toks pat kaip įvesties eilutė, o funkcija filtras () sukuria filtruotą sąrašą, kurio ilgis gali būti iki įvesties sąrašo. Sąrašo supratimas sukuria naują sveikųjų skaičių sąrašą, kuris paprastai yra daug mažesnis nei įvesties sąrašas, tačiau erdvės sudėtingumas blogiausiu atveju vis tiek yra O(n). Todėl bendras pagalbinės erdvės sudėtingumas yra O (n)

Ištraukite „Interger“ iš eilutės naudodami ciklo ir isdigit () metodą

Naudokite kilpą, kad kartotumėte kiekvieną eilutės simbolį ir patikrinkite, ar tai yra skaitmuo, naudodami isskaitmuo () metodas. Jei tai skaitmuo, pridėkite jį prie sąrašo.

Python3




test_string>=> 'There are 2 apples for 4 persons'> numbers>=> []> for> char>in> test_string:> >if> char.isdigit():> >numbers.append(>int>(char))> print>(>'The numbers list is:'>, numbers)>

>

>

Išvestis

The numbers list is: [2, 4]>

Laiko sudėtingumas: O(n), kur n yra eilutės ilgis.
Pagalbinė erdvė: O(k), kur k yra skaitmenų skaičius eilutėje.

Ištraukite skaičius iš eilutės naudodami str.translate() su str.maketrans()

Apibrėžkite įvesties eilutę, tada inicijuokite vertimo lentelę, kad pašalintumėte neskaitinius simbolius naudodami g. maketrans () . Naudokite g. išversti () su vertimo lentele, kad pašalintumėte neskaitinius simbolius iš eilutės ir išsaugotumėte rezultatą naujoje eilutėje, vadinamoje skaitinė_eilutė . Naudokite g. padalinti () padalinti skaitinė_eilutė į žodžių sąrašą ir išsaugokite rezultatą naujame sąraše, vadinamame žodžiais. Inicijuokite tuščią sąrašą, vadinamą skaičiais, kad išsaugotumėte gautus sveikuosius skaičius, tada kartokite kiekvieną žodį žodžių sąraše. Patikrinkite, ar žodis yra skaitinė eilutė g. isskaitmuo () .Jei žodis yra skaitinė eilutė, konvertuokite jį į sveikąjį skaičių naudodami int() ir pridėkite jį prie skaičių sąrašo.

Išspausdinkite gautą sveikųjų skaičių sąrašą.

Toliau pateikiamas pirmiau minėto metodo įgyvendinimas:

Python3




# Define the input string> test_string>=> 'There are 2 apples for 4 persons'> # Print the original string> print>(>'The original string : '> +> test_string)> # Initialize a translation table to remove non-numeric characters> translation_table>=> str>.maketrans('>', '>', '>abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!'>#$%&'()*+,-./:;?@[]^_`~')> # Use str.translate() with the translation table to remove non-numeric characters> numeric_string>=> test_string.translate(translation_table)> # Use str.split() to split the string into a list of word> words>=> numeric_string.split()> numbers>=> [>int>(i)>for> i>in> words]> print>(>'The numbers list is : '> +> str>(numbers))>

>

>

Išvestis

The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>

Laiko sudėtingumas: O(n), kur n yra įvesties eilutės ilgis. Metodai str.translate() ir str.split() užtrunka O(n) laiko, o kartojimas per kiekvieną žodį žodžių sąraše užtrunka O(k) laiko, kur k yra sąraše esančių žodžių skaičius. skaitines eilutes.
Pagalbinė erdvė: O(n), kai sukuriame naują eilutę ir naują žodžių sąrašą, kurių kiekvienas yra tokio pat ilgio kaip įvesties eilutė, ir sukuriame naują sveikųjų skaičių sąrašą, kurio didžiausias ilgis yra k, kur k yra sąraše esantys žodžiai, kurie yra skaitinės eilutės.

Ištraukite numerius iš eilutės naudodami numpy modulį

Inicijuokite eilutę test_string, tada padalykite eilutę į žodžių sąrašą naudodami padalijimo metodą ir sukurkite nelygus masyvas x iš gauto sąrašo. Naudokite np.char .neskaitinis sukurti loginę kaukę, rodančią, kurie x elementai yra skaitiniai. Naudokite šią loginę kaukę indeksuoti x ir išskirti tik skaitinius elementus. Konvertuokite gautą eilučių masyvą į sveikųjų skaičių masyvą naudodami kaip tipas.

Išspausdinkite gautą sveikųjų skaičių masyvą.

Python3




import> numpy as np> # initializing string> test_string>=> 'There are 2 apples for 4 persons'> # printing original string> print>(>'The original string : '> +> test_string)> # getting numbers from string using numpy> x>=> np.array(test_string.split())> res>=> x[np.char.isnumeric(x)].astype(>int>)> # print result> print>(>'The numbers list is : '> +> str>(res))> #This code is contributed by Vinay Pinjala.>

>

>

Išvestis:

The original string : There are 2 apples for 4 persons The numbers list is : [2 4]>

Laiko sudėtingumas: O(n), kur n yra pradinės eilutės test_string ilgis. Taip yra todėl, kad naudojant padalijimo metodą eilutę padalyti į žodžių sąrašą reikia O(n) laiko, o metodui np.char.isnumeric reikia O(n) laiko, kad būtų sukurta loginė kaukė. Likusios operacijos trunka pastoviai.

Pagalbinė erdvė: O(n), kur n yra pradinės eilutės test_string ilgis. Taip yra todėl, kad sukuriame neryškų masyvą x, kuriame saugomi eilutės žodžiai, kurie užima O (n) vietos. Erdvė, kurią naudoja gautas sveikųjų skaičių masyvas, taip pat yra O(n), nes joje yra visi skaitiniai eilutės elementai.