Выбрать из строки числа

Дана строка, содержащая натуральные числа и слова. Необходимо сформировать список из чисел, содержащихся в этой строке. Например, задана строка "abc83 cde7 1 b 24". На выходе мы должны получить список [83, 7, 1, 24].

Следует посимвольно перебирать строку. Если очередной символ цифра, надо добавить ее в новую строку. Далее проверять символы за ней, и если они тоже цифры, то добавлять их в конец этой новой подстроки из цифр. Когда очередной символ окажется не цифрой, или будет достигнут конец строки, то надо преобразовать строку из цифр в число и добавить в список.

s = input()
l = len(s)
integ = []
i = 0
while i < l:
    s_int = ''
    a = s[i]
    while '0' <= a <= '9':
        s_int += a
        i += 1
        if i < l:
            a = s[i]
        else:
            break
    i += 1
    if s_int != '':
        integ.append(int(s_int))

print(integ)
5 dkfj78df 9 8 dkfj8
[5, 78, 9, 8, 8]

Обратите внимание, что данное решение извлекает именно числа, а не цифры. Иначе мы бы не получили число 78, а получили отдельно цифру 7 и цифру 8. Задача на извлечение цифр существенно проще.

Решение через цикл for:

a = input()
num_list = []

num = ''
for char in a:
    if char.isdigit():
        num = num + char
    else:
        if num != '':
            num_list.append(int(num))
            num = ''
if num != '':
    num_list.append(int(num))

print(num_list)

Если в строке числа всегда отделены от слов пробелами, задача решается проще:

s = input()
word_list = s.split()
num_list = []

for word in word_list:
    if word.isnumeric():
        num_list.append(int(word))

print(num_list)

Здесь происходит разделение строки на слова по пробелам. В цикле с помощью метода isnumeric() каждое слово проверяется, является ли оно числом. Подобную задачу можно решить в одну строку, если использовать функцию filter().

s = input()
word_list = s.split()

num_list = [int(num) for num in filter(lambda num: num.isnumeric(), word_list)]

print(num_list)

В функцию filter() передается лямбда-выражение, проверяющее слова, и список слов. Функция возвращает список строк-чисел. Далее с помощью генератора списка строки преобразовываются в целочисленный тип.

На практике при решении подобных задач, когда надо найти и извлечь из строки что-либо, обычно пользуются регулярными выражениями. В примере ниже не обязательно, чтобы число было отделено пробелами.

import re

s = input()

nums = re.findall(r'\d+', s)

nums = [int(i) for i in nums]

print(nums)

Для поиска вещественных чисел:

import re

s = input()

nums = re.findall(r'\d*\.\d+|\d+', s)

nums = [float(i) for i in nums]

print(nums)

Решение задач на Python