Mnohokrát při práci s řetězci narazíme na problém, kdy potřebujeme získat všechny číselné výskyty. Tento typ problému se obecně vyskytuje v konkurenčním programování a také při vývoji webových aplikací. Pojďme diskutovat o určitých způsobech, jak lze tento problém vyřešit Krajta .
Input: 'There are 2 apples for 4 persons' Output: [2, 4] Explanation: 2 and 4 are the only number present in the input string.>
Extrahujte čísla z řetězce v Pythonu
Níže jsou uvedeny metody, které pokryjeme v tomto článku:
- Použitím Porozumění seznamu a isdigit() metoda
- Použitím re.findall() metoda
- Použitím isnumeric() metoda
- Použitím Filtr() funkce
- Pomocí smyčky a isdigit() metoda
- Použitím str.translate() s str.maketrans()
- Použitím nemotorný modul
Extrahujte čísla z řetězce pomocí porozumění seznamu a isdigit() metoda
Tento problém lze vyřešit pomocí funkce split pro převod řetězce na seznam a poté na porozumění seznamu což nám může pomoci procházet seznam a isdigit Funkce pomáhá dostat číslici z řetězce.
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))> |
>
>Výstup
The original string : There are 2 apples for 4 persons The numbers list is :[2, 4]>
Časová náročnost: O(n), kde n je počet prvků ve vstupním řetězci.
Pomocný prostor: O(n), kde n je počet čísel ve vstupním řetězci.
Extrahujte číslici z řetězce pomocí re.findall() metoda
Tento konkrétní problém lze také vyřešit pomocí Pythonu regulární výraz, můžeme použít funkce findall pro kontrolu číselných výskytů pomocí odpovídajícího řetězce regulárních výrazů.
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))> |
>
>Výstup
The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>
Extrahujte Interger z řetězce pomocí metody isnumeric().
V Pythonu máme isnumerický funkce, která může uživateli říci, zda konkrétní prvek je číslo nebo ne, takže touto metodou můžeme také extrahovat číslo z řetězce.
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))> |
>
>Výstup
The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>
Časová složitost: O(N)
Pomocný prostor: O(N)
Extrahujte číslici z řetězce pomocí funkce Filter().
Nejprve definujeme vstupní řetězec, poté vytiskneme původní řetězec a rozdělíme vstupní řetězec na seznam slov pomocí rozdělit() metoda. Použijte filtr() funkce pro odfiltrování nečíselných prvků ze seznamu použitím funkce lambda X .isdigit() na každý prvekPřeveďte zbývající prvky ve filtrovaném seznamu na celá čísla pomocí porozumění seznamu
Vytiskněte výsledný seznam celých čísel
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))> |
>
>Výstup
The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>
Časová složitost: O(n), kde n je délka vstupního řetězce. Metodě split() trvá O(n) čas, než rozdělí vstupní řetězec na seznam slov, a funkci filter() trvá O(n) čas, než iteruje každý prvek v seznamu a použije funkci lambda. Porozumění seznamu trvá O(k) čas, kde k je počet prvků ve filtrovaném seznamu, které jsou číslicemi, a to je obvykle mnohem menší než n. Celková časová složitost je tedy O(n).
Složitost pomocného prostoru: O(n), protože metoda split() vytvoří seznam slov, která mají stejnou délku jako vstupní řetězec, a funkce filter() vytvoří filtrovaný seznam, který může mít stejnou délku jako vstupní seznam. Porozumění seznamu vytvoří nový seznam celých čísel, který je obvykle mnohem menší než vstupní seznam, ale prostorová složitost je v nejhorším případě stále O(n). Celková složitost pomocného prostoru je tedy O(n)
Extrahujte Interger z řetězce pomocí smyčky a metody isdigit().
Použijte smyčku k iteraci přes každý znak v řetězci a zkontrolujte, zda se jedná o číslici pomocí isdigit() metoda. Pokud je to číslice, přidejte ji do seznamu.
Python3
dělat v Javě
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)> |
>
>Výstup
The numbers list is: [2, 4]>
Časová složitost: O(n), kde n je délka řetězce.
Pomocný prostor: O(k), kde k je počet číslic v řetězci.
Extrahujte čísla z řetězce pomocí str.translate() s str.maketrans()
Definujte vstupní řetězec a poté Inicializujte překladovou tabulku pro odstranění nečíselných znaků pomocí str. maketrans() . Použití str. přeložit() s překladovou tabulkou k odstranění nečíselných znaků z řetězce a uložení výsledku do nového řetězce s názvem číselný_řetězec . Použití str. rozdělit() rozdělit se číselný_řetězec do seznamu slov a výsledek uložit do nového seznamu s názvem slova. Inicializujte prázdný seznam volaných čísel pro uložení výsledných celých čísel a poté iterujte každé slovo v seznamu slov. Zkontrolujte, zda je slovo číselným řetězcem pomocí str. isdigit() .Pokud je slovo číselný řetězec, převeďte jej na celé číslo pomocí int() a připojte jej k seznamu čísel.
Vytiskněte výsledný seznam celých čísel.
Níže je uvedena implementace výše uvedeného přístupu:
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))> |
>
>Výstup
The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>
Časová složitost: O(n), kde n je délka vstupního řetězce. Metoda str.translate() a str.split() trvají O(n) čas a opakování každého slova v seznamu slov trvá O(k) čas, kde k je počet slov v seznamu, která jsou číselné řetězce.
Pomocný prostor: O(n), když vytvoříme nový řetězec a nový seznam slov, z nichž každé má stejnou délku jako vstupní řetězec, a vytvoříme nový seznam celých čísel, který má maximální délku k, kde k je počet slova v seznamu, která jsou číselnými řetězci.
Extrahujte čísla z řetězce pomocí numpy modulu
Inicializujte řetězec test_string, poté rozdělte řetězec na seznam slov pomocí metody rozdělení a vytvořte a nemotorný pole x z výsledného seznamu. Použijte np.char .isnumerický vytvořit booleovskou masku označující, které prvky x jsou číselné. Pomocí této booleovské masky indexujte x a extrahujte pouze číselné prvky. Převeďte výsledné pole řetězců na pole celých čísel pomocí astype.
Vytiskněte výsledné pole celých čísel.
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.> |
>
>
Výstup:
The original string : There are 2 apples for 4 persons The numbers list is : [2 4]>
Časová složitost: O(n), kde n je délka původního řetězce testovací_řetězec. Je to proto, že metodě split trvá O(n) čas, než rozdělí řetězec na seznam slov, a metodě np.char.isnumeric trvá O(n) čas, než vytvoří booleovskou masku. Zbývající operace trvají konstantní čas.
Pomocný prostor: O(n), kde n je délka původního řetězce testovací_řetězec. Je to proto, že vytváříme numpy pole x pro uložení slov řetězce, které zabírá O(n) místa. Prostor použitý výsledným numpy polem celých čísel je také O(n), protože obsahuje všechny číselné prvky řetězce.