Vaak komen we tijdens het werken met strings dit probleem tegen waarbij we alle numerieke exemplaren moeten ophalen. Dit soort problemen komt meestal voor bij competitief programmeren en ook bij webontwikkeling. Laten we bepaalde manieren bespreken waarop dit probleem kan worden opgelost 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.>
Haal getallen uit een string in Python
Hieronder staan de methoden die we in dit artikel zullen behandelen:
- Gebruik makend van Lijstbegrip En iscijfer() methode
- Gebruik makend van opnieuw vinden() methode
- Gebruik makend van isnumeriek() methode
- Gebruik makend van Filter() functie
- Met behulp van een lus en iscijfer() methode
- Gebruik makend van str.translate() met str.maketrans()
- Gebruik makend van numpig module
Haal getallen uit een tekenreeks met behulp van lijstbegrip en iscijfer() methode
Dit probleem kan worden opgelost door de split-functie te gebruiken om string naar lijst te converteren en vervolgens de lijst begrip die ons kan helpen de lijst te doorlopen en iscijfer functie helpt om het cijfer uit een string te halen.
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))> |
>
>Uitvoer
The original string : There are 2 apples for 4 persons The numbers list is :[2, 4]>
Tijdcomplexiteit: O(n), waarbij n het aantal elementen in de invoerreeks is.
Hulpruimte: O(n), waarbij n het aantal getallen in de invoerreeks is.
Cijfer uit tekenreeks extraheren met re.findall() methode
Dit specifieke probleem kan ook worden opgelost met Python regex, wij kunnen de gebruiken findall-functie om te controleren op numerieke exemplaren met behulp van een overeenkomende regex-tekenreeks.
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))> |
>
>Uitvoer
The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>
Extraheer Interger uit de tekenreeks met behulp van de isnumerieke()-methode
In Python hebben we dat gedaan isnumeriek functie die de gebruiker kan vertellen of een bepaald element een getal is of niet, dus met deze methode kunnen we het getal ook uit een string halen.
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))> |
>
>Uitvoer
The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>
Tijdcomplexiteit: O(N)
Hulpruimte: O(N)
Cijfer uit tekenreeks extraheren met behulp van de functie Filter().
Eerst definiëren we de invoerreeks, drukken vervolgens de originele reeks af en splitsen de invoerreeks in een lijst met woorden met behulp van de splitsen() methode. Gebruik de filter() functie om niet-numerieke elementen uit de lijst te filteren door de lambda-functie X .isdigit() naar elk elementConverteer de resterende elementen in de gefilterde lijst naar gehele getallen met behulp van lijstbegrip
Druk de resulterende lijst met gehele getallen af
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))> |
>
>Uitvoer
The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>
Tijdcomplexiteit: O(n), waarbij n de lengte van de invoerreeks is. De methode split() heeft O(n) tijd nodig om de invoerreeks in een lijst met woorden te splitsen, en de functie filter() heeft O(n) tijd nodig om elk element in de lijst te doorlopen en de lambda-functie toe te passen. Het begrijpen van de lijst kost O(k) tijd, waarbij k het aantal elementen in de gefilterde lijst is dat uit cijfers bestaat, en dit is doorgaans veel kleiner dan n. Daarom is de totale tijdscomplexiteit O(n).
Complexiteit van de hulpruimte: O(n), aangezien de methode split() een lijst met woorden creëert die dezelfde lengte heeft als de invoertekenreeks, en de functie filter() een gefilterde lijst creëert die maximaal dezelfde lengte kan hebben als de invoerlijst. Het lijstbegrip creëert een nieuwe lijst met gehele getallen die doorgaans veel kleiner is dan de invoerlijst, maar in het ergste geval is de ruimtecomplexiteit nog steeds O(n). Daarom is de totale complexiteit van de hulpruimte O(n)
Extraheer Interger uit de tekenreeks met behulp van een lus- en isdigit()-methode
Gebruik een lus om elk teken in de tekenreeks te herhalen en controleer of het een cijfer is met behulp van de iscijfer() methode. Als het een cijfer is, voeg het dan toe aan een lijst.
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)> |
>
>Uitvoer
The numbers list is: [2, 4]>
Tijdcomplexiteit: O(n), waarbij n de lengte van de string is.
Hulpruimte: O(k), waarbij k het aantal cijfers in de string is.
Haal getallen uit de tekenreeks met str.translate() met str.maketrans()
Definieer de invoerreeks en initialiseer vervolgens een vertaaltabel om niet-numerieke tekens te verwijderen met behulp van str. maketrans() . Gebruik str. vertalen() met de vertaaltabel om niet-numerieke tekens uit de string te verwijderen en het resultaat op te slaan in een nieuwe string genaamd numerieke_tekenreeks . Gebruik str. splitsen() om de te splitsen numerieke_tekenreeks in een lijst met woorden en sla het resultaat op in een nieuwe lijst met de naam woorden. Initialiseer een lege lijst met de naam getallen om de resulterende gehele getallen op te slaan en herhaal vervolgens elk woord in de lijst met woorden. Controleer of het woord een numerieke reeks is met behulp van str. iscijfer() .Als het woord een numerieke reeks is, converteer het dan naar een geheel getal met behulp van int() en voeg het toe aan de lijst met nummers.
Druk de resulterende lijst met gehele getallen af.
Hieronder vindt u de implementatie van de bovenstaande aanpak:
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))> |
>
>Uitvoer
The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>
Tijdcomplexiteit: O(n), waarbij n de lengte van de invoerreeks is. De methoden str.translate() en str.split() nemen O(n) tijd in beslag, en het herhalen van elk woord in de lijst met woorden kost O(k) tijd, waarbij k het aantal woorden in de lijst is dat numerieke reeksen.
Hulpruimte: O(n), terwijl we een nieuwe string en een nieuwe lijst met woorden maken die elk dezelfde lengte hebben als de invoerstring, en we een nieuwe lijst met gehele getallen creëren met een maximale lengte van k, waarbij k het aantal is woorden in de lijst die numerieke reeksen zijn.
Extraheer getallen uit de string met behulp van de numpy-module
Initialiseer de tekenreeks test_string en splits de tekenreeks vervolgens in een lijst met woorden met behulp van de splitsmethode en maak een numpig array x uit de resulterende lijst. Gebruik np.char .isnumeriek om een Booleaans masker te maken dat aangeeft welke elementen van x numeriek zijn. Gebruik dit Booleaanse masker om x te indexeren en alleen de numerieke elementen te extraheren. Converteer de resulterende reeks tekenreeksen naar een reeks gehele getallen met behulp van astype.
Druk de resulterende reeks gehele getallen af.
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.> |
handmatig testen
>
>
Uitgang:
The original string : There are 2 apples for 4 persons The numbers list is : [2 4]>
Tijdcomplexiteit: O(n), waarbij n de lengte is van de originele tekenreeks test_string. Dit komt omdat de split-methode O(n) tijd nodig heeft om de string in een lijst met woorden te splitsen, en de np.char.isnumeric-methode O(n) tijd nodig heeft om het Booleaanse masker te maken. De resterende bewerkingen nemen constante tijd in beslag.
Hulpruimte: O (n), waarbij n de lengte is van de originele tekenreeks test_string. Dit komt omdat we een numpy-array x maken om de woorden van de string op te slaan, wat O(n)-ruimte in beslag neemt. De ruimte die wordt gebruikt door de resulterende numpy-array van gehele getallen is ook O(n), omdat deze alle numerieke elementen van de string bevat.