Daudzas reizes, strādājot ar virknēm, mēs saskaramies ar šo problēmu, kurā mums ir jāiegūst visi skaitļi. Šāda veida problēmas parasti rodas konkurētspējīgā programmēšanā un arī tīmekļa izstrādē. Apspriedīsim dažus veidus, kā šo problēmu var atrisināt 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.>
Izņemiet skaitļus no virknes Python
Tālāk ir norādītas metodes, kuras mēs apskatīsim šajā rakstā:
- Izmantojot Saraksta izpratne un isdigit() metodi
- Izmantojot re.findall() metodi
- Izmantojot isnumeric() metodi
- Izmantojot Filtrs() funkciju
- Izmantojot cilpu un isdigit() metodi
- Izmantojot str.translate() ar str.maketrans()
- Izmantojot nejutīgs modulis
Izņemiet skaitļus no virknes, izmantojot saraksta izpratni un isdigit() metodi
Šo problēmu var atrisināt, izmantojot sadalīšanas funkciju, lai pārvērstu virkni sarakstā un pēc tam saraksta izpratne kas var palīdzēt mums atkārtot sarakstu un isdigit funkcija palīdz izvilkt ciparu no virknes.
Python3
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))> |
>
>Izvade
The original string : There are 2 apples for 4 persons The numbers list is :[2, 4]>
Laika sarežģītība: O(n), kur n ir elementu skaits ievades virknē.
Palīgtelpa: O(n), kur n ir skaitļu skaits ievades virknē.
Izņemiet ciparu no virknes, izmantojot re.findall() metodi
Šo konkrēto problēmu var atrisināt arī, izmantojot Python regex, mēs varam izmantot atrast visu funkciju lai pārbaudītu skaitliskos gadījumus, izmantojot atbilstošu regulārā izteiksmes virkni.
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))> |
>
java virkne uz json
>Izvade
The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>
Izņemiet Interger no virknes, izmantojot isnumeric() metodi
Pythonā mums ir isnumeric funkcija, kas var pateikt lietotājam, vai konkrēts elements ir skaitlis vai nav, tāpēc ar šo metodi mēs varam arī iegūt skaitli no virknes.
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))> |
>
>Izvade
The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>
Laika sarežģītība: O(N)
Palīgtelpa: O(N)
Izņemiet ciparu no virknes, izmantojot funkciju Filter ().
Pirmkārt, mēs definējam ievades virkni, pēc tam izdrukājam sākotnējo virkni un sadalām ievades virkni vārdu sarakstā, izmantojot sadalīt () metodi. Izmantojiet filtrs () funkcija, lai no saraksta filtrētu elementus, kas nav skaitļi, izmantojot lambda funkcija x .isdigit() katram elementam Pārveidojiet atlikušos elementus filtrētajā sarakstā par veseliem skaitļiem, izmantojot saraksta izpratni
Izdrukājiet iegūto veselo skaitļu sarakstu
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))> |
>
>Izvade
The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>
Laika sarežģītība: O(n), kur n ir ievades virknes garums. Split() metodei nepieciešams O(n) laiks, lai sadalītu ievades virkni vārdu sarakstā, un funkcijai filtrs() nepieciešams O(n) laiks, lai atkārtotu katru saraksta elementu un lietotu lambda funkciju. Saraksta izpratnei nepieciešams O(k) laiks, kur k ir to elementu skaits filtrētajā sarakstā, kas ir cipari, un tas parasti ir daudz mazāks par n. Tāpēc kopējā laika sarežģītība ir O (n).
Papildtelpas sarežģītība: O(n), jo split() metode izveido vārdu sarakstu, kura garums ir tāds pats kā ievades virknei, un funkcija filter() izveido filtrētu sarakstu, kura garums var būt līdz pat ievades sarakstam. Saraksta izpratne rada jaunu veselu skaitļu sarakstu, kas parasti ir daudz mazāks par ievades sarakstu, bet vietas sarežģītība sliktākajā gadījumā joprojām ir O(n). Tāpēc kopējā palīgtelpas sarežģītība ir O (n)
Izņemiet Interger no virknes, izmantojot cilpas un isdigit() metodi
Izmantojiet cilpu, lai atkārtotu katru virknes rakstzīmi un pārbaudiet, vai tas ir cipars, izmantojot isdigit() metodi. Ja tas ir cipars, pievienojiet to sarakstam.
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)> |
>
>Izvade
The numbers list is: [2, 4]>
Laika sarežģītība: O(n), kur n ir virknes garums.
Palīgtelpa: O(k), kur k ir ciparu skaits virknē.
Izņemiet skaitļus no virknes, izmantojot str.translate() ar str.maketrans()
Definējiet ievades virkni un pēc tam Inicializējiet tulkošanas tabulu, lai noņemtu rakstzīmes, kas nav ciparu, izmantojot str. maketrans() . Izmantot str. tulkot () ar tulkošanas tabulu, lai no virknes noņemtu rakstzīmes, kas nav ciparu, un saglabātu rezultātu jaunā virknē, ko sauc ciparu_virkne . Izmantot str. sadalīt () sadalīt ciparu_virkne vārdu sarakstā un saglabājiet rezultātu jaunā sarakstā, ko sauc par vārdiem. Inicializējiet tukšu sarakstu, ko sauc par cipariem, lai saglabātu iegūtos veselus skaitļus, un pēc tam atkārtojiet katru vārdu vārdu sarakstā. Pārbaudiet, vai vārds ir ciparu virkne, izmantojot str. isdigit() .Ja vārds ir ciparu virkne, konvertējiet to par veselu skaitli, izmantojot int() un pievienojiet to skaitļu sarakstam.
Izdrukājiet iegūto veselo skaitļu sarakstu.
Tālāk ir aprakstīta iepriekš minētās pieejas īstenošana.
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))> |
>
>Izvade
The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>
Laika sarežģītība: O(n), kur n ir ievades virknes garums. Metodei str.translate() un metodei str.split() ir nepieciešams O(n) laiks, un katra vārda atkārtošana vārdu sarakstā aizņem O(k) laiku, kur k ir to vārdu skaits sarakstā, kas ir ciparu virknes.
Palīgtelpa: O(n), jo mēs izveidojam jaunu virkni un jaunu vārdu sarakstu, kuriem katram ir tāds pats garums kā ievades virknei, un mēs izveidojam jaunu veselu skaitļu sarakstu, kura maksimālais garums ir k, kur k ir vārdus sarakstā, kas ir ciparu virknes.
Izņemiet skaitļus no virknes, izmantojot numpy moduli
Inicializējiet virkni test_string, pēc tam sadaliet virkni vārdu sarakstā, izmantojot sadalīšanas metodi, un izveidojiet nejutīgs masīvs x no iegūtā saraksta. Izmantojiet np.char .isnumeric lai izveidotu Būla masku, kas norāda, kuri x elementi ir skaitļi. Izmantojiet šo Būla masku, lai indeksētu x un izvilktu tikai ciparu elementus. Konvertējiet iegūto virkņu masīvu par veselu skaitļu masīvu, izmantojot kā tips.
Izdrukājiet iegūto veselo skaitļu masīvu.
Python3
jquery vecāks
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.> |
>
>
Izvade:
The original string : There are 2 apples for 4 persons The numbers list is : [2 4]>
Laika sarežģītība: O(n), kur n ir sākotnējās virknes testa_virkne garums. Tas ir tāpēc, ka sadalīšanas metodei ir nepieciešams O(n) laiks, lai sadalītu virkni vārdu sarakstā, un np.char.isnumeric metodei nepieciešams O(n) laiks, lai izveidotu Būla masku. Atlikušās darbības aizņem nemainīgu laiku.
Palīgtelpa: O(n), kur n ir sākotnējās virknes testa_virkne garums. Tas ir tāpēc, ka mēs izveidojam masīvu x, lai saglabātu virknes vārdus, kas aizņem O(n) vietu. Atstarpe, ko izmanto iegūtais veselo skaitļu masīvs, ir arī O(n), jo tajā ir visi virknes skaitliskie elementi.