Med delom z nizi velikokrat naletimo na to težavo, pri kateri moramo dobiti vse številske pojavitve. Ta vrsta težave se običajno pojavlja pri konkurenčnem programiranju in tudi pri spletnem razvoju. Razpravljajmo o nekaterih načinih, na katere je mogoče rešiti to težavo 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.>
Ekstrahiraj številke iz niza v Pythonu
Spodaj so metode, ki jih bomo obravnavali v tem članku:
- Uporaba Razumevanje seznama in isdigit() metoda
- Uporaba re.findall() metoda
- Uporaba isnumeric() metoda
- Uporaba Filter() funkcijo
- Z uporabo zanke in isdigit() metoda
- Uporaba str.translate() z str.maketrans()
- Uporaba numpy modul
Izvlecite števila iz niza z razumevanjem seznama in isdigit() metoda
To težavo je mogoče rešiti z uporabo funkcije split za pretvorbo niza v seznam in nato razumevanje seznama ki nam lahko pomaga iterirati po seznamu in isdigit funkcija pomaga pridobiti števko iz niza.
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))> |
>
>Izhod
The original string : There are 2 apples for 4 persons The numbers list is :[2, 4]>
Časovna zapletenost: O(n), kjer je n število elementov v vhodnem nizu.
Pomožni prostor: O(n), kjer je n število števil v vhodnem nizu.
Ekstrakt števke iz niza z uporabo re.findall() metoda
To posebno težavo je mogoče rešiti tudi s Pythonom regularni izraz, lahko uporabimo funkcijo findall za preverjanje številskih pojavitev z uporabo ujemajočega niza regularnega izraza.
Python3
kaj je oddaja imenika
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))> |
>
>Izhod
The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>
Izvlecite Interger iz niza z uporabo metode isnumeric().
V Pythonu imamo isnumeric funkcijo, ki lahko uporabniku pove, ali je določen element število ali ne, tako da lahko s to metodo tudi izvlečemo število iz niza.
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))> |
>
>Izhod
The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>
Časovna zahtevnost: O(N)
Pomožni prostor: O(N)
Izvlecite številko iz niza s funkcijo Filter().
Najprej definiramo vhodni niz, nato natisnemo izvirni niz in razdelimo vhodni niz na seznam besed z uporabo razdeli () metoda. Uporabi filter() funkcijo za filtriranje neštevilskih elementov s seznama z uporabo lambda funkcija x .isdigit() na vsak element Pretvori preostale elemente na filtriranem seznamu v cela števila z uporabo razumevanja seznama
Natisnite dobljeni seznam celih števil
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))> |
>
>Izhod
The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>
Časovna zahtevnost: O(n), kjer je n dolžina vhodnega niza. Metoda split() potrebuje O(n) časa, da razdeli vhodni niz na seznam besed, funkcija filter() pa O(n) časa, da ponovi vsak element na seznamu in uporabi funkcijo lambda. Razumevanje seznama traja O(k) časa, kjer je k število elementov na filtriranem seznamu, ki so števke, in to je običajno veliko manjše od n. Zato je celotna časovna kompleksnost O(n).
Kompleksnost pomožnega prostora: O(n), saj metoda split() ustvari seznam besed, ki ima enako dolžino kot vhodni niz, funkcija filter() pa ustvari filtriran seznam, ki je lahko do enake dolžine kot vhodni seznam. Razumevanje seznama ustvari nov seznam celih števil, ki je običajno veliko manjši od vhodnega seznama, vendar je kompleksnost prostora v najslabšem primeru še vedno O(n). Zato je celotna kompleksnost pomožnega prostora O(n)
Izvlecite Interger iz niza z uporabo zanke in metode isdigit().
Uporabite zanko za ponavljanje vsakega znaka v nizu in preverite, ali je številka z uporabo isdigit() metoda. Če je številka, jo dodajte na seznam.
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)> |
>
>Izhod
The numbers list is: [2, 4]>
Časovna zahtevnost: O(n), kjer je n dolžina niza.
Pomožni prostor: O(k), kjer je k število števk v nizu.
Ekstrahiraj številke iz niza z uporabo str.translate() s str.maketrans()
Definirajte vhodni niz in nato inicializirajte prevajalsko tabelo, da odstranite neštevilske znake z uporabo str. maketrans() . Uporaba str. prevesti() s prevajalsko tabelo za odstranitev neštevilskih znakov iz niza in shranjevanje rezultata v nov niz, imenovan številski_niz . Uporaba str. razdeli () razdeliti številski_niz na seznam besed in rezultat shranite na nov seznam, imenovan besede. Inicializirajte prazen seznam, imenovan številke, da shranite nastala cela števila in nato ponovite vsako besedo na seznamu besed. Preverite, ali je beseda številski niz z uporabo str. isdigit() .Če je beseda številski niz, jo pretvorite v celo število z uporabo int() in jo pripnite na seznam številk.
Natisnite dobljeni seznam celih števil.
Spodaj je izvedba zgornjega pristopa:
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))> |
>
>Izhod
The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>
Časovna zahtevnost: O(n), kjer je n dolžina vhodnega niza. Metodi str.translate() in str.split() trajata O(n) časa, ponavljanje po vsaki besedi na seznamu besed pa O(k) časa, kjer je k število besed na seznamu, ki so številčni nizi.
Pomožni prostor: O(n), ko ustvarimo nov niz in nov seznam besed, od katerih ima vsaka enako dolžino kot vhodni niz, in ustvarimo nov seznam celih števil z največjo dolžino k, kjer je k število besede na seznamu, ki so številski nizi.
Ekstrahiraj številke iz niza z uporabo modula numpy
Inicializirajte niz test_string, nato razdelite niz na seznam besed z uporabo metode split in ustvarite numpy matriko x z nastalega seznama. Uporabite np.char .isnumeric ustvariti logično masko, ki označuje, kateri elementi x so številski. Uporabite to logično masko za indeksiranje x in ekstrahirajte samo številske elemente. Pretvorite nastalo matriko nizov v matriko celih števil z uporabo astype.
Natisnite nastalo matriko celih števil.
Python3
cp ukaz v linuxu
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.> |
>
>
Izhod:
The original string : There are 2 apples for 4 persons The numbers list is : [2 4]>
Časovna zahtevnost: O(n), kjer je n dolžina izvirnega niza test_string. To je zato, ker metoda split potrebuje O(n) časa, da razdeli niz na seznam besed, metoda np.char.isnumeric pa O(n) časa, da ustvari logično masko. Preostale operacije zahtevajo konstanten čas.
Pomožni prostor: O(n), kjer je n dolžina izvirnega niza test_string. To je zato, ker ustvarimo matriko numpy x za shranjevanje besed niza, ki zavzame O(n) prostora. Prostor, ki ga uporablja nastala matrika celih števil numpy, je prav tako O(n), saj vsebuje vse številske elemente niza.