logo

Python | Extrahujte čísla z reťazca

Mnohokrát pri práci s reťazcami narazíme na problém, v ktorom potrebujeme získať všetky číselné výskyty. Tento typ problému sa vo všeobecnosti vyskytuje v konkurenčnom programovaní a tiež pri vývoji webu. Poďme diskutovať o určitých spôsoboch, ako možno tento problém vyriešiť Python .

je vzťah
  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 reťazca v Pythone

Nižšie sú uvedené metódy, ktorým sa budeme venovať v tomto článku:



  • Použitím Porozumenie zoznamu a isdigit() metóda
  • Použitím re.findall() metóda
  • Použitím isnumeric() metóda
  • Použitím Filter() funkciu
  • Pomocou slučky a isdigit() metóda
  • Použitím str.translate() s str.maketrans()
  • Použitím nemotorný modul

Extrahujte čísla z reťazca pomocou porozumenia zoznamu a isdigit() metóda

Tento problém možno vyriešiť pomocou funkcie split na konverziu reťazca na zoznam a potom na porozumenie zoznamu čo nám môže pomôcť pri iterácii cez zoznam a isdigit funkcia pomáha dostať číslicu z reťazca.

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ýkon

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

Časová zložitosť: O(n), kde n je počet prvkov vo vstupnom reťazci.
Pomocný priestor: O(n), kde n je počet čísel vo vstupnom reťazci.

Extrahujte číslicu z reťazca pomocou re.findall() metóda

Tento konkrétny problém je možné vyriešiť aj pomocou Pythonu regulárny výraz, môžeme použiť funkcia findall na kontrolu číselných výskytov pomocou zodpovedajúceho regulárneho reťazca.

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ýkon

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

Extrahujte Interger z reťazca pomocou metódy isnumeric().

V Pythone máme isnumerický funkcia, ktorá môže používateľovi povedať, či konkrétny prvok je číslo alebo nie, takže touto metódou môžeme tiež extrahovať číslo z reťazca.

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

>

mapový java iterátor
>

Výkon

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

Časová zložitosť: O(N)
Pomocný priestor: O(N)

Extrahujte číslicu z reťazca pomocou funkcie Filter().

Najprv definujeme vstupný reťazec, potom vytlačíme pôvodný reťazec a rozdelíme vstupný reťazec na zoznam slov pomocou rozdeliť () metóda. Použi filter() funkcia na odfiltrovanie nečíselných prvkov zo zoznamu použitím funkcie lambda funkcia X .isdigit() na každý prvokPreveďte zostávajúce prvky vo filtrovanom zozname na celé čísla pomocou porozumenia zoznamu

Vytlačte výsledný zoznam 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ýkon

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

Časová zložitosť: O(n), kde n je dĺžka vstupného reťazca. Metóde split() trvá O(n) čas na rozdelenie vstupného reťazca do zoznamu slov a funkcii filter() trvá O(n) čas, kým iteruje každý prvok v zozname a použije funkciu lambda. Pochopenie zoznamu trvá O(k) čas, kde k je počet prvkov vo filtrovanom zozname, ktoré sú číslice, a to je zvyčajne oveľa menšie ako n. Celková časová zložitosť je teda O(n).

Zložitosť pomocného priestoru: O(n), pretože metóda split() vytvorí zoznam slov, ktoré majú rovnakú dĺžku ako vstupný reťazec, a funkcia filter() vytvorí filtrovaný zoznam, ktorý môže mať rovnakú dĺžku ako vstupný zoznam. Porozumenie zoznamu vytvorí nový zoznam celých čísel, ktorý je zvyčajne oveľa menší ako zoznam vstupov, ale priestorová zložitosť je v najhoršom prípade stále O(n). Celková zložitosť pomocného priestoru je preto O(n)

Extrahujte Interger z reťazca pomocou slučky a metódy isdigit().

Použite slučku na iteráciu každého znaku v reťazci a skontrolujte, či ide o číslicu pomocou isdigit() metóda. Ak je to číslica, pridajte ju do zoznamu.

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

>

>

večera vs čas na večeru
Výkon

The numbers list is: [2, 4]>

Časová zložitosť: O(n), kde n je dĺžka reťazca.
Pomocný priestor: O(k), kde k je počet číslic v reťazci.

Extrahujte čísla z reťazca pomocou str.translate() pomocou str.maketrans()

Definujte vstupný reťazec a potom inicializujte prekladovú tabuľku na odstránenie nečíselných znakov pomocou str. maketrans() . Použite str. preložiť () s prekladovou tabuľkou odstrániť nečíselné znaky z reťazca a uložiť výsledok do nového reťazca tzv číselný_reťazec . Použite str. rozdeliť () rozdeliť sa číselný_reťazec do zoznamu slov a výsledok uložiť do nového zoznamu s názvom slová. Inicializujte prázdny zoznam nazývaných čísel, aby ste uložili výsledné celé čísla, a potom opakujte každé slovo v zozname slov. Skontrolujte, či je slovo číselný reťazec pomocou str. isdigit() .Ak je slovo číselný reťazec, skonvertujte ho na celé číslo pomocou int() a pridajte ho do zoznamu čísel.

Vytlačte výsledný zoznam celých čísel.

Nižšie je uvedená implementácia vyššie uvedeného prí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ýkon

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

Časová zložitosť: O(n), kde n je dĺžka vstupného reťazca. Metóda str.translate() a str.split() trvajú O(n) čas a opakovanie každého slova v zozname slov trvá O(k) čas, kde k je počet slov v zozname, ktoré sú číselné reťazce.
Pomocný priestor: O(n), keď vytvoríme nový reťazec a nový zoznam slov, z ktorých každé má rovnakú dĺžku ako vstupný reťazec, a vytvoríme nový zoznam celých čísel, ktorý má maximálnu dĺžku k, kde k je počet slová v zozname, ktoré sú číselnými reťazcami.

Extrahujte čísla z reťazca pomocou numpy modulu

Inicializujte reťazec test_string, potom rozdeľte reťazec na zoznam slov pomocou metódy rozdelenia a vytvorte a nemotorný pole x z výsledného zoznamu. Použite np.char .isnumerický na vytvorenie booleovskej masky označujúcej, ktoré prvky x sú číselné. Použite túto booleovskú masku na indexovanie x a extrahovanie iba číselných prvkov. Preveďte výsledné pole reťazcov na pole celých čísel pomocou atyp.

Vytlač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ýkon:

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

Časová zložitosť: O(n), kde n je dĺžka pôvodného reťazca test_string. Je to preto, že metóde split trvá O(n) čas na rozdelenie reťazca na zoznam slov a metóde np.char.isnumeric trvá O(n) čas na vytvorenie booleovskej masky. Zostávajúce operácie trvajú konštantne.

Pomocný priestor: O(n), kde n je dĺžka pôvodného reťazca test_string. Je to preto, že vytvoríme numpy pole x na uloženie slov reťazca, ktoré zaberá O(n) priestor. Priestor, ktorý používa výsledné numpy pole celých čísel, je tiež O(n), pretože obsahuje všetky číselné prvky reťazca.