logo

Python | Udtræk tal fra streng

Mange gange, mens vi arbejder med strenge, støder vi på dette problem, hvor vi skal have alle de numeriske forekomster. Denne type problemer opstår generelt i konkurrencepræget programmering og også i webudvikling. Lad os diskutere visse måder, hvorpå dette problem kan løses 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.>

Uddrag tal fra en streng i Python

Nedenfor er de metoder, vi vil dække i denne artikel:



  • Ved brug af Listeforståelse og isdigit() metode
  • Ved brug af re.findall() metode
  • Ved brug af isnumerisk() metode
  • Ved brug af Filter() fungere
  • Ved hjælp af en løkke og isdigit() metode
  • Ved brug af str.translate() med str.maketrans()
  • Ved brug af nusset modul

Udtræk tal fra streng ved hjælp af listeforståelse og isdigit() metode

Dette problem kan løses ved at bruge split-funktionen til at konvertere streng til liste og derefter listeforståelse som kan hjælpe os med at gentage listen og isdigit funktion hjælper med at få cifferet ud af en streng.

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

forskel på en tiger og en løve

>

>

Produktion

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

Tidskompleksitet: O(n), hvor n er antallet af elementer i inputstrengen.
Hjælpeplads: O(n), hvor n er antallet af tal i inputstrengen.

Udtræk ciffer fra streng ved hjælp af re.findall() metode

Dette særlige problem kan også løses ved hjælp af Python regex, vi kan bruge findall funktion for at kontrollere for de numeriske forekomster ved hjælp af en matchende regex-streng.

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

>

>

Produktion

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

Udtræk Interger fra streng ved hjælp af isnumeric() metode

I Python har vi isnumerisk funktion, som kan fortælle brugeren, om et bestemt element er et tal eller ej, så ved denne metode kan vi også udtrække tallet fra en streng.

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

>

>

Produktion

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

Tidskompleksitet: O(N)
Hjælpeplads: O(N)

Udtræk ciffer fra streng ved hjælp af Filter()-funktionen

Først definerer vi inputstrengen, udskriver derefter den originale streng og deler inputstrengen op i en liste med ord ved hjælp af dele() metode. Brug filter() funktion til at bortfiltrere ikke-numeriske elementer fra listen ved at anvende lambda funktion x .isdigit() til hvert elementKonverter de resterende elementer i den filtrerede liste til heltal ved hjælp af en listeforståelse

Udskriv den resulterende liste over heltal

Python3


metode understreng java



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

>

industri og fabrik

>

Produktion

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

Tidskompleksitet: O(n), hvor n er længden af ​​inputstrengen. Split()-metoden tager O(n) tid at opdele inputstrengen i en liste af ord, og filter()-funktionen tager O(n) tid at iterere over hvert element i listen og anvende lambda-funktionen. Listeforståelsen tager O(k) tid, hvor k er antallet af elementer i den filtrerede liste, der er cifre, og dette er typisk meget mindre end n. Derfor er den samlede tidskompleksitet O(n).

Hjælperums kompleksitet: O(n), da split()-metoden opretter en liste over ord, der har samme længde som inputstrengen, og filter()-funktionen opretter en filtreret liste, der kan være op til samme længde som inputlisten. Listeforståelsen skaber en ny liste over heltal, der typisk er meget mindre end inputlisten, men rumkompleksiteten er stadig O(n) i værste fald. Derfor er den overordnede hjælperumskompleksitet O(n)

Udtræk Interger fra streng ved hjælp af en loop og isdigit() metode

Brug en loop til at iterere over hvert tegn i strengen og tjek om det er et ciffer ved hjælp af isdigit() metode. Hvis det er et ciffer, skal du tilføje det til en liste.

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

>

>

Produktion

The numbers list is: [2, 4]>

Tidskompleksitet: O(n), hvor n er længden af ​​strengen.
Hjælpeplads: O(k), hvor k er antallet af cifre i strengen.

Udtræk tal fra streng ved hjælp af str.translate() med str.maketrans()

Definer inputstrengen og initialiser derefter en oversættelsestabel for at fjerne ikke-numeriske tegn vha str. maketrans() . Brug str. Oversætte() med oversættelsestabellen for at fjerne ikke-numeriske tegn fra strengen og gemme resultatet i en ny streng kaldet numerisk_streng . Brug str. dele() at opdele numerisk_streng ind i en liste med ord og gem resultatet i en ny liste kaldet ord. Initialiser en tom liste kaldet tal for at gemme de resulterende heltal, og gentag derefter hvert ord på listen over ord. Tjek om ordet er en numerisk streng vha str. isdigit() .Hvis ordet er en numerisk streng, skal du konvertere det til et heltal vha int() og føj det til listen over numre.

Udskriv den resulterende liste over heltal.

Nedenfor er implementeringen af ​​ovenstående tilgang:

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

govinda
>

>

Produktion

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

Tidskompleksitet: O(n), hvor n er længden af ​​inputstrengen. Str.translate()-metoden og str.split()-metoden tager O(n) tid, og at iterere over hvert ord på listen over ord tager O(k) tid, hvor k er antallet af ord på listen, der er numeriske strenge.
Hjælpeplads: O(n), da vi opretter en ny streng og en ny liste over ord, der hver har samme længde som inputstrengen, og vi opretter en ny liste over heltal, der har en maksimal længde på k, hvor k er antallet af ord på listen, der er numeriske strenge.

Uddrag tal fra streng ved hjælp af numpy-modulet

Initialiser strengen test_string og del derefter strengen i en liste med ord ved hjælp af splitmetoden og opret en nusset array x fra den resulterende liste. Brug np.char .isnumeric for at oprette en boolsk maske, der angiver, hvilke elementer i x der er numeriske. Brug denne boolske maske til at indeksere x og udtrække kun de numeriske elementer. Konverter den resulterende matrix af strenge til en matrix af heltal vha astype.

Udskriv den resulterende matrix af heltal.

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

>

>

Produktion:

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

Tidskompleksitet: O(n), hvor n er længden af ​​den originale streng test_string. Dette skyldes, at splitmetoden tager O(n) tid at opdele strengen i en liste af ord, og np.char.isnumeric metoden tager O(n) tid at skabe den boolske maske. De resterende operationer tager konstant tid.

Hjælpemellemrum: O(n), hvor n er længden af ​​den originale streng test_string. Dette skyldes, at vi opretter et numpy array x for at gemme ordene i strengen, som tager O(n) plads. Mellemrummet, der bruges af det resulterende numpy-array af heltal, er også O(n), da det indeholder alle de numeriske elementer i strengen.