logo

Python | Extrage numerele din șir

De multe ori, în timp ce lucrăm cu șiruri, întâlnim această problemă în care trebuie să obținem toate aparițiile numerice. Acest tip de problemă apare în general în programarea competitivă și, de asemenea, în dezvoltarea web. Să discutăm anumite moduri în care această problemă poate fi rezolvată Piton .

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

Extrageți numere dintr-un șir în Python

Mai jos sunt metodele pe care le vom acoperi în acest articol:

Extrageți numere din șir folosind înțelegerea listei și isdigit() metodă

Această problemă poate fi rezolvată folosind funcția split pentru a converti șirul în listă și apoi înțelegerea listei care ne poate ajuta să repetăm ​​lista și isdigit funcția ajută la extragerea cifrei dintr-un șir.



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))>

>

>

Ieșire

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

Complexitatea timpului: O(n), unde n este numărul de elemente din șirul de intrare.
Spațiu auxiliar: O(n), unde n este numărul de numere din șirul de intrare.

Extrageți Cifra din șir folosind re.findall() metodă

Această problemă specială poate fi rezolvată și folosind Python regex, putem folosi funcția findall pentru a verifica aparițiile numerice folosind un șir regex care se potrivește.

Python3


care este dimensiunea ecranului monitorului meu



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))>

>

>

Ieșire

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

Extrageți Interger din șir folosind metoda isnumeric().

În Python, avem este numeric funcție care poate spune utilizatorului dacă un anumit element este un număr sau nu, așa că prin această metodă putem extrage și numărul dintr-un șir.

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))>

>

parcurgerea post-ordine a arborelui binar
>

Ieșire

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

Complexitatea timpului: O(N)
Spațiu auxiliar: O(N)

Extrageți Cifra din șir folosind funcția Filter().

Mai întâi, definim șirul de intrare, apoi tipărim șirul original și împărțim șirul de intrare într-o listă de cuvinte folosind Despică() metodă. Folosește filtru() funcția de filtrare a elementelor nenumerice din listă prin aplicarea functie lambda X .isdigit() la fiecare elementConversia elementelor rămase din lista filtrată în numere întregi utilizând o listă de înțelegere

Tipăriți lista rezultată de numere întregi

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))>

>

>

Ieșire

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

Complexitatea timpului: O(n), unde n este lungimea șirului de intrare. Metoda split() durează O(n) timp pentru a împărți șirul de intrare într-o listă de cuvinte, iar funcția filter() are nevoie de O(n) timp pentru a repeta fiecare element din listă și a aplica funcția lambda. Înțelegerea listei durează O(k) timp, unde k este numărul de elemente din lista filtrată care sunt cifre și acesta este de obicei mult mai mic decât n. Prin urmare, complexitatea generală a timpului este O(n).

Complexitatea spațiului auxiliar: O(n), deoarece metoda split() creează o listă de cuvinte care are aceeași lungime ca șirul de intrare, iar funcția filter() creează o listă filtrată care poate avea până la aceeași lungime ca și lista de intrare. Înțelegerea listei creează o nouă listă de numere întregi care este de obicei mult mai mică decât lista de intrare, dar complexitatea spațiului este încă O(n) în cel mai rău caz. Prin urmare, complexitatea generală a spațiului auxiliar este O(n)

Extrageți Interger din șir folosind o buclă și metoda isdigit().

Utilizați o buclă pentru a repeta peste fiecare caracter din șir și verificați dacă este o cifră folosind isdigit() metodă. Dacă este o cifră, adăugați-o la o listă.

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)>

>

>

cum se transformă char în șir
Ieșire

The numbers list is: [2, 4]>

Complexitatea timpului: O(n), unde n este lungimea șirului.
Spatiu auxiliar: O(k), unde k este numărul de cifre din șir.

Extrageți numere din șir folosind str.translate() cu str.maketrans()

Definiți șirul de intrare, apoi inițializați un tabel de traducere pentru a elimina caracterele nenumerice folosind str. maketrans() . Utilizare str. Traduceți() cu tabelul de traducere pentru a elimina caracterele nenumerice din șir și pentru a stoca rezultatul într-un șir nou numit șir_numeric . Utilizare str. Despică() a împărți șir_numeric într-o listă de cuvinte și stocați rezultatul într-o nouă listă numită cuvinte. Inițializați o listă goală numită numere pentru a stoca numerele întregi rezultate și apoi repetați peste fiecare cuvânt din lista de cuvinte. Verificați dacă cuvântul este un șir numeric folosind str. isdigit() .Dacă cuvântul este un șir numeric, convertiți-l într-un număr întreg folosind int() și adăugați-l la lista de numere.

Tipăriți lista rezultată de numere întregi.

Mai jos este implementarea abordării de mai sus:

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))>

>

>

Ieșire

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

Complexitatea timpului: O(n), unde n este lungimea șirului de intrare. Metoda str.translate() și metoda str.split() iau timp O(n), iar repetarea fiecărui cuvânt din lista de cuvinte durează timp O(k), unde k este numărul de cuvinte din listă care sunt șiruri numerice.
Spațiu auxiliar: O(n), pe măsură ce creăm un șir nou și o nouă listă de cuvinte care au fiecare aceeași lungime ca șirul de intrare și creăm o nouă listă de numere întregi care are o lungime maximă de k, unde k este numărul de cuvintele din listă care sunt șiruri numerice.

Extrageți numere din șir folosind modulul numpy

Inițializați șirul test_string apoi împărțiți șirul într-o listă de cuvinte folosind metoda split și creați a numpy tabloul x din lista rezultată. Utilizați np.char .este numeric pentru a crea o mască booleană care să indice ce elemente ale lui x sunt numerice. Utilizați această mască booleană pentru a indexa x și a extrage doar elementele numerice. Convertiți matricea rezultată de șiruri de caractere într-o matrice de numere întregi folosind astip.

Tipăriți matricea rezultată de numere întregi.

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.>

>

>

Ieșire:

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

Complexitatea timpului: O(n), unde n este lungimea șirului original șir_test. Acest lucru se datorează faptului că metoda split durează O(n) timp pentru a împărți șirul într-o listă de cuvinte, iar metoda np.char.isnumeric durează O(n) timp pentru a crea masca booleană. Operațiunile rămase durează constant.

Spațiu auxiliar: O(n), unde n este lungimea șirului original șir_test. Acest lucru se datorează faptului că creăm o matrice numpy x pentru a stoca cuvintele șirului, care ocupă spațiu O(n). Spațiul folosit de matricea numpy rezultată de numere întregi este, de asemenea, O(n), deoarece conține toate elementele numerice ale șirului.