logo

Python | Extrahera nummer från strängen

Många gånger, när vi arbetar med strängar, stöter vi på det här problemet där vi måste få alla numeriska förekomster. Den här typen av problem uppstår vanligtvis i konkurrensutsatt programmering och även i webbutveckling. Låt oss diskutera vissa sätt på vilka detta problem kan lösas Pytonorm .

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

Extrahera nummer från en sträng i Python

Nedan är metoderna som vi kommer att täcka i den här artikeln:



  • Använder sig av Listförståelse och isdigit() metod
  • Använder sig av re.findall() metod
  • Använder sig av isnumeric() metod
  • Använder sig av Filtrera() fungera
  • Använda en slinga och isdigit() metod
  • Använder sig av str.translate() med str.maketrans()
  • Använder sig av numpy modul

Extrahera nummer från strängen med hjälp av listförståelse och isdigit() metod

Detta problem kan lösas genom att använda split-funktionen för att konvertera sträng till lista och sedan listförståelse som kan hjälpa oss att iterera genom listan och isdigit funktionen hjälper till att få ut siffran ur en sträng.

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

>

>

binära trädtyper
Produktion

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

Tidskomplexitet: O(n), där n är antalet element i inmatningssträngen.
Hjälputrymme: O(n), där n är antalet tal i inmatningssträngen.

Extrahera siffra från sträng med re.findall() metod

Detta specifika problem kan också lösas med Python regex, vi kan använda findall funktion för att söka efter numeriska förekomster med hjälp av en matchande regex-sträng.

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

Extrahera Interger från strängen med metoden isnumeric().

I Python har vi isnumerisk funktion som kan berätta för användaren om ett visst element är ett tal eller inte, så med den här metoden kan vi också extrahera numret från en sträng.

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

Tidskomplexitet: O(N)
Hjälputrymme: O(N)

Extrahera siffra från sträng med funktionen Filter().

Först definierar vi inmatningssträngen och skriver sedan ut den ursprungliga strängen och delar upp inmatningssträngen i en lista med ord med hjälp av dela() metod. Använd filtrera() funktion för att filtrera bort icke-numeriska element från listan genom att använda lambdafunktion x .isdigit() till varje element Konvertera de återstående elementen i den filtrerade listan till heltal med hjälp av en listförståelse

Skriv ut den resulterande listan med heltal

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

>

>

Produktion

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

Tidskomplexitet: O(n), där n är längden på inmatningssträngen. Split()-metoden tar O(n) tid att dela upp inmatningssträngen i en lista med ord, och filter()-funktionen tar O(n) tid att iterera över varje element i listan och tillämpa lambda-funktionen. Listförståelsen tar O(k) tid, där k är antalet element i den filtrerade listan som är siffror, och detta är vanligtvis mycket mindre än n. Därför är den totala tidskomplexiteten O(n).

Hjälputrymmes komplexitet: O(n), eftersom split()-metoden skapar en lista med ord som har samma längd som inmatningssträngen, och filter()-funktionen skapar en filtrerad lista som kan vara upp till samma längd som inmatningslistan. Listförståelsen skapar en ny lista med heltal som vanligtvis är mycket mindre än indatalistan, men rymdkomplexiteten är fortfarande O(n) i värsta fall. Därför är den totala hjälputrymmeskomplexiteten O(n)

Extrahera Interger från strängen med en loop och isdigit()-metod

Använd en slinga för att iterera över varje tecken i strängen och kontrollera om det är en siffra med hjälp av isdigit() metod. Om det är en siffra, lägg till den i en lista.

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

Tidskomplexitet: O(n), där n är längden på strängen.
Extra utrymme: O(k), där k är antalet siffror i strängen.

Extrahera siffror från strängen med str.translate() med str.maketrans()

Definiera inmatningssträngen och Initiera sedan en översättningstabell för att ta bort icke-numeriska tecken med hjälp av str. maketrans() . Använda sig av str. Översätt() med översättningstabellen för att ta bort icke-numeriska tecken från strängen och lagra resultatet i en ny sträng som kallas numerisk_sträng . Använda sig av str. dela() att dela upp numerisk_sträng i en lista med ord och lagra resultatet i en ny lista som kallas ord. Initiera en tom lista som kallas siffror för att lagra de resulterande heltal och iterera sedan över varje ord i listan med ord. Kontrollera om ordet är en numerisk sträng med hjälp av str. isdigit() .Om ordet är en numerisk sträng, konvertera det till ett heltal med hjälp av int() och lägg till den i listan med nummer.

Skriv ut den resulterande listan med heltal.

Nedan är implementeringen av ovanstående tillvägagångssätt:

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

>

>

Produktion

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

Tidskomplexitet: O(n), där n är längden på inmatningssträngen. Str.translate()-metoden och str.split()-metoden tar O(n) tid, och att iterera över varje ord i listan med ord tar O(k) tid, där k är antalet ord i listan som är numeriska strängar.
Hjälputrymme: O(n), när vi skapar en ny sträng och en ny lista med ord som var och en har samma längd som inmatningssträngen, och vi skapar en ny lista med heltal som har en maximal längd på k, där k är antalet ord i listan som är numeriska strängar.

Extrahera nummer från strängen med hjälp av numpy-modulen

Initiera strängen test_string och dela sedan strängen i en lista med ord med hjälp av splitmetoden och skapa en numpy array x från den resulterande listan. Använd np.char .isnumeric för att skapa en boolesk mask som anger vilka element i x som är numeriska. Använd denna booleska mask för att indexera x och extrahera endast de numeriska elementen. Konvertera den resulterande matrisen av strängar till en matris med heltal med hjälp av astyp.

Skriv ut den resulterande matrisen av 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]>

Tidskomplexitet: O(n), där n är längden på den ursprungliga strängen test_string. Detta beror på att splitmetoden tar O(n) tid att dela upp strängen i en lista med ord, och metoden np.char.isnumeric tar O(n) tid att skapa den booleska masken. De återstående operationerna tar konstant tid.

Hjälputrymme: O(n), där n är längden på den ursprungliga strängen test_string. Detta beror på att vi skapar en numpy array x för att lagra orden i strängen, som tar O(n) utrymme. Utrymmet som används av den resulterande numpy matrisen av heltal är också O(n), eftersom det innehåller alla numeriska element i strängen.