Багато разів, працюючи з рядками, ми стикаємося з цією проблемою, коли нам потрібно отримати всі числа. Цей тип проблеми зазвичай виникає в конкурентному програмуванні, а також у веб-розробці. Давайте обговоримо певні способи вирішення цієї проблеми 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.>
Видобуток чисел із рядка в Python
Нижче наведено методи, які ми розглянемо в цій статті.
- Використання Розуміння списку і isdigit() метод
- Використання re.findall() метод
- Використання isnumeric() метод
- Використання Фільтр() функція
- За допомогою петлі і isdigit() метод
- Використання str.translate() з str.maketrans()
- Використання numpy модуль
Вилучення чисел із рядка за допомогою розуміння списку і isdigit() метод
Цю проблему можна вирішити за допомогою функції split для перетворення рядка в список, а потім у розуміння списку що може допомогти нам пройти через список і isdigit функція допомагає отримати цифру з рядка.
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))> |
>
>Вихід
The original string : There are 2 apples for 4 persons The numbers list is :[2, 4]>
Часова складність: O(n), де n – кількість елементів у вхідному рядку.
Допоміжний простір: O(n), де n – кількість чисел у вхідному рядку.
Видобути цифру з рядка за допомогою re.findall() метод
Цю конкретну проблему також можна вирішити за допомогою Python регулярний вираз, ми можемо використовувати функція findall для перевірки числових входжень за допомогою відповідного рядка регулярного виразу.
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))> |
факториал в java
>
>Вихід
The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>
Видобути інтергер із рядка за допомогою методу isnumeric().
У Python ми маємо є числовим функція, яка може повідомити користувачеві, чи є окремий елемент числом чи ні, тому за допомогою цього методу ми також можемо витягти число з рядка.
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))> |
>
>Вихід
The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>
Часова складність: O(N)
Допоміжний простір: O(N)
Видобути цифру з рядка за допомогою функції Filter().
Спочатку ми визначаємо вхідний рядок, потім друкуємо оригінальний рядок і розділяємо вхідний рядок на список слів за допомогою split() метод. Використовувати фільтр() функція для фільтрування нечислових елементів зі списку шляхом застосування лямбда-функція х .isdigit() до кожного елемента Перетворити інші елементи у відфільтрованому списку на цілі числа за допомогою розуміння списку
Вивести отриманий список цілих чисел
Python3
абстрактний клас 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))> |
>
команда arp
>Вихід
The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>
Часова складність: O(n), де n - довжина вхідного рядка. Методу split() потрібно O(n) часу, щоб розділити вхідний рядок на список слів, а функції filter() потрібно O(n) часу, щоб перебрати кожен елемент у списку та застосувати лямбда-функцію. Розуміння списку займає O(k) часу, де k — це кількість елементів у відфільтрованому списку, які є цифрами, і це зазвичай набагато менше, ніж n. Тому загальна часова складність дорівнює O(n).
Складність допоміжного приміщення: O(n), оскільки метод split() створює список слів, який має таку саму довжину, що й вхідний рядок, а функція filter() створює відфільтрований список, який може мати таку ж довжину, як і вхідний список. Розуміння списку створює новий список цілих чисел, який зазвичай набагато менший, ніж список вхідних даних, але складність простору дорівнює O(n) у гіршому випадку. Тому загальна складність допоміжного простору становить O(n)
Видобути інтергер із рядка за допомогою циклу та методу isdigit().
Використовуйте цикл, щоб перебирати кожен символ у рядку та перевіряти, чи є він цифрою за допомогою isdigit() метод. Якщо це цифра, додайте її до списку.
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)> |
>
>Вихід
The numbers list is: [2, 4]>
Часова складність: O(n), де n - довжина рядка.
Допоміжні приміщення: O(k), де k – кількість цифр у рядку.
Видобуток чисел із рядка за допомогою str.translate() із str.maketrans()
Визначте вхідний рядок, а потім ініціалізуйте таблицю перекладу, щоб видалити нечислові символи за допомогою вул. maketrans() . використання вул. переклад() з таблицею перекладу, щоб видалити нечислові символи з рядка та зберегти результат у новому рядку числовий_рядок . використання вул. split() розділити числовий_рядок у список слів і зберегти результат у новому списку під назвою words. Ініціалізуйте порожній список, який називається числами, щоб зберегти отримані цілі числа, а потім перебирайте кожне слово в списку слів. Перевірте, чи слово є числовим рядком, використовуючи вул. isdigit() .Якщо слово є числовим рядком, перетворіть його на ціле число за допомогою int() і додайте його до списку чисел.
Вивести отриманий список цілих чисел.
Нижче наведено реалізацію вищезазначеного підходу:
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))> |
>
>Вихід
The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>
Часова складність: O(n), де n - довжина вхідного рядка. Метод str.translate() і str.split() займає O(n) часу, а ітерація кожного слова в списку слів займає O(k) часу, де k – кількість слів у списку, які числові рядки.
Допоміжний простір: O(n), оскільки ми створюємо новий рядок і новий список слів, кожне з яких має таку саму довжину, що й вхідний рядок, і ми створюємо новий список цілих чисел із максимальною довжиною k, де k — кількість слів у списку, які є числовими рядками.
Видобуток чисел із рядка за допомогою модуля numpy
Ініціалізуйте рядок test_string, потім розділіть рядок на список слів за допомогою методу split і створіть numpy масив x із результуючого списку. Використовуйте np.char .isnumeric щоб створити булеву маску, що вказує, які елементи x є числовими. Використовуйте цю логічну маску для індексування x і вилучення лише числових елементів. Перетворіть отриманий масив рядків на масив цілих чисел за допомогою astype.
Вивести отриманий масив цілих чисел.
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.> |
розпакування в linux
>
>
Вихід:
The original string : There are 2 apples for 4 persons The numbers list is : [2 4]>
Часова складність: O(n), де n - довжина вихідного рядка test_string. Це пояснюється тим, що метод split займає O(n) часу, щоб розділити рядок на список слів, а метод np.char.isnumeric займає O(n) часу, щоб створити маску логічного значення. Решта операцій займає постійний час.
Допоміжний простір: O(n), де n - довжина вихідного рядка test_string. Це тому, що ми створюємо масив numpy x для зберігання слів рядка, який займає O(n) місця. Простір, який використовується отриманим масивом numpy цілих чисел, також дорівнює O(n), оскільки він містить усі числові елементи рядка.