logo

Python | Trekk ut tall fra streng

Mange ganger, mens vi jobber med strenger, kommer vi over dette problemet der vi trenger å få alle de numeriske forekomstene. Denne typen problemer oppstår vanligvis i konkurrerende programmering og også i webutvikling. La oss diskutere visse måter dette problemet kan løses på 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.>

Trekk ut tall fra en streng i Python

Nedenfor er metodene vi vil dekke i denne artikkelen:

  • Ved hjelp av Listeforståelse og isdigit() metode
  • Ved hjelp av re.findall() metode
  • Ved hjelp av isnumeric() metode
  • Ved hjelp av Filter() funksjon
  • Ved hjelp av en løkke og isdigit() metode
  • Ved hjelp av str.translate() med str.maketrans()
  • Ved hjelp av nusset modul

Trekk ut tall fra streng ved å bruke listeforståelse og isdigit() metode

Dette problemet kan løses ved å bruke split-funksjonen for å konvertere streng til liste og deretter listeforståelse som kan hjelpe oss å iterere gjennom listen og isdigit funksjonen hjelper til med å få sifferet ut av 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))>

omvendt streng i java

>

>

Produksjon

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

Tidskompleksitet: O(n), hvor n er antall elementer i inndatastrengen.
Hjelpeplass: O(n), der n er antall tall i inndatastrengen.

Trekk ut siffer fra streng ved å bruke re.findall() metode

Dette spesielle problemet kan også løses ved hjelp av Python regulært uttrykk, vi kan bruke findall funksjon for å se etter numeriske forekomster ved å bruke en samsvarende 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))>

>

>

Produksjon

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

Trekk ut Interger fra streng ved å bruke isnumeric()-metoden

I Python har vi isnumerisk funksjon som kan fortelle brukeren om et bestemt element er et tall eller ikke, så ved denne metoden kan vi også trekke ut 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))>

>

>

Produksjon

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

Tidskompleksitet: O(N)
Hjelpeområde: O(N)

Trekk ut siffer fra streng ved å bruke Filter()-funksjonen

Først definerer vi inndatastrengen, skriver vi deretter ut den originale strengen og deler opp inndatastrengen i en liste med ord ved å bruke dele() metode. Bruke filter() funksjon for å filtrere ut ikke-numeriske elementer fra listen ved å bruke lambda funksjon x .isdigit() til hvert element Konverter de gjenværende elementene i den filtrerte listen til heltall ved å bruke en listeforståelse

Skriv ut den resulterende listen over heltall

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 fabrikk

>

Produksjon

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

Tidskompleksitet: O(n), hvor n er lengden på inndatastrengen. Split()-metoden tar O(n) tid å dele inn-strengen i en liste med ord, og filter()-funksjonen tar O(n) tid å iterere over hvert element i listen og bruke lambda-funksjonen. Listeforståelsen tar O(k) tid, der k er antall elementer i den filtrerte listen som er sifre, og dette er vanligvis mye mindre enn n. Derfor er den totale tidskompleksiteten O(n).

Ekstra plass kompleksitet: O(n), ettersom split()-metoden oppretter en liste med ord som har samme lengde som inndatastrengen, og filter()-funksjonen lager en filtrert liste som kan være opp til samme lengde som inndatalisten. Listeforståelsen lager en ny liste over heltall som typisk er mye mindre enn inndatalisten, men romkompleksiteten er fortsatt O(n) i verste fall. Derfor er den generelle hjelperomskompleksiteten O(n)

Trekk ut Interger fra streng ved å bruke en loop og isdigit() metode

Bruk en løkke til å iterere over hvert tegn i strengen og sjekk om det er et siffer ved å bruke isdigit() metode. Hvis det er et siffer, legg 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)>

>

>

Produksjon

The numbers list is: [2, 4]>

Tidskompleksitet: O(n), hvor n er lengden på strengen.
Ekstra plass: O(k), der k er antall sifre i strengen.

Trekk ut tall fra streng ved å bruke str.translate() med str.maketrans()

Definer inndatastrengen og Initialiser deretter en oversettelsestabell for å fjerne ikke-numeriske tegn ved å bruke str. maketrans() . Bruk str. oversette() med oversettelsestabellen for å fjerne ikke-numeriske tegn fra strengen og lagre resultatet i en ny streng kalt numerisk_streng . Bruk str. dele() å dele opp numerisk_streng inn i en liste med ord og lagre resultatet i en ny liste kalt ord. Initialiser en tom liste kalt tall for å lagre de resulterende heltallene og iterer deretter over hvert ord i listen over ord. Sjekk om ordet er en numerisk streng ved hjelp av str. isdigit() .Hvis ordet er en numerisk streng, konverter det til et heltall ved å bruke int() og legg den til listen over tall.

Skriv ut den resulterende listen over heltall.

Nedenfor er implementeringen av tilnærmingen ovenfor:

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

latex skriftstørrelser
>

>

Produksjon

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

Tidskompleksitet: O(n), hvor n er lengden på inndatastrengen. Str.translate()-metoden og str.split()-metoden tar O(n) tid, og å iterere over hvert ord i listen over ord tar O(k) tid, der k er antall ord i listen som er numeriske strenger.
Hjelpeplass: O(n), når vi lager en ny streng og en ny liste med ord som hver har samme lengde som inndatastrengen, og vi lager en ny liste med heltall som har en maksimal lengde på k, der k er antallet av ord i listen som er numeriske strenger.

Trekk ut tall fra strengen ved å bruke numpy-modulen

Initialiser strengen test_string og del deretter strengen i en liste med ord ved å bruke split-metoden og lag en nusset array x fra den resulterende listen. Bruk np.char .isnumeric for å lage en boolsk maske som indikerer hvilke elementer i x som er numeriske. Bruk denne boolske masken til å indeksere x og trekke ut bare de numeriske elementene. Konverter den resulterende matrisen av strenger til en matrise med heltall ved hjelp av astype.

Skriv ut den resulterende matrisen med heltall.

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

>

>

Produksjon:

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

Tidskompleksitet: O(n), hvor n er lengden på den opprinnelige strengen test_string. Dette er fordi splittmetoden tar O(n) tid å dele strengen inn i en liste med ord, og np.char.isnumeric-metoden tar O(n) tid å lage den boolske masken. De gjenværende operasjonene tar konstant tid.

Auxiliary Space: O(n), hvor n er lengden på den opprinnelige strengen test_string. Dette er fordi vi lager en numpy matrise x for å lagre ordene i strengen, som tar O(n) plass. Mellomrommet som brukes av den resulterende numpy matrisen med heltall er også O(n), siden den inneholder alle de numeriske elementene i strengen.