Извлечь из строки числа
Дана строка, содержащая натуральные числа и слова. Необходимо сформировать список из чисел, содержащихся в этой строке. Например, задана строка «abc83 cde7 1 b 24». На выходе мы должны получить список [83, 7, 1, 24].
Решение задачи на языке программирования Python
Следует посимвольно перебирать строку. Если очередной символ цифра, надо добавить ее в новую строку. Далее проверять символы за ней, и если они тоже цифры, то добавлять их в конец этой новой подстроки из цифр. Когда очередной символ окажется не цифрой, или будет достигнут конец строки, то надо преобразовать строку из цифр в число и добавить в список.
s = input() length = len(s) integers = [] i = 0 # индекс текущего символа while i length: s_int = '' # строка для нового числа while i length and '0' s[i] '9': s_int += s[i] i += 1 i += 1 if s_int != '': integers.append(int(s_int)) print(integers)
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)
X Скрыть Наверх
Решение задач на Python
Как преобразовать число в список из 32 битных целых чисел на Python?
Использую Pyrogram. В параметр функции требуется список из 32 битных чисел. Что это значит? Дословное описание аргумента из документации: id (List of int 32-bit) – ID of message.
Что с этим необходимо сделать?
- Вопрос задан более года назад
- 188 просмотров
Комментировать
Решения вопроса 0
Ответы на вопрос 1
Требуется список ID сообщений, которые будут подвергаться какой-то обработке.
Список из одного элемента — это тоже список.
Ответ написан более года назад
Комментировать
Нравится Комментировать
преобразование числа в список [закрыт]
Закрыт. Этот вопрос необходимо уточнить или дополнить подробностями. Ответы на него в данный момент не принимаются.
Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение.
Закрыт 5 лет назад .
b = 456; c = str(b); x = list(c); z = str(x); a = int(z);
почему невозможно преобразовать int к типу list и обратно в int ? логикеа такая, с int превращает в str, с str в list, а потов в обратном направлении
Отслеживать
задан 24 ноя 2017 в 13:24
117 1 1 золотой знак 1 1 серебряный знак 11 11 бронзовых знаков
а как вы представляете себе преобразование списка в число? Возьмите 0 элемент например.
24 ноя 2017 в 13:27
Думаю для всех очевидно что 0 должен быть пустым списком, а 2 должно быть [1, 0]. 🙂
24 ноя 2017 в 13:28
@Arnial А 3 должно быть [2, 1, 0] или [1, 1]?
24 ноя 2017 в 13:48
что вы ожидаете получить? Приведите явный пример и словами детально опишите
24 ноя 2017 в 13:54
Pero, всё равно непонятно. Вы хотите получить список из цифр числа, записанного в десятичном представлении?
28 ноя 2017 в 8:36
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
z = str(x);
Стоит заменить на
z = ''.join(x)
И что мешает самому написать преобразование?
x = 1234 result = [] while x > 0: result.append(x % 10) x //= 10 result.reverse() print(result) # [1, 2, 3, 4] num = 0 for i, v in enumerate(reversed(result)): num += v * 10 ** i print(num) # 1234
Отслеживать
ответ дан 24 ноя 2017 в 13:51
6,121 3 3 золотых знака 19 19 серебряных знаков 38 38 бронзовых знаков
Вы вероятно хотите, чтобы
list(456) == [4, 5, 6]
int([4, 5, 6]) == 456
Но функция list() работает только с объектами, которые имеют интерфейс iterable , например с множествами , строками , итераторами и генераторами — просто со всем, что может использоваться в цикле for перед двоеточием:
for i in range(10): for i in (2, 3, 5): for i in "abcd":
Теоретически бы могло быть по меньшей мере
list(любый_объект) == [любый_объект]
но ни это не так, потому что бы могли возникнуть проблемы:
i = 456 list(i) # [456] или [i] ? [456] всегда то самое, но [i] меняется с i
С другой стороны, функция int() не может работать со списками — что разумное можно ожидать например от
int(["abc", [3.7, i, (5, 2)], True, (max, 1)]) # .
Как преобразовать строковое представление списка в список в Python
Одна из распространенных проблем, с которыми может столкнуться разработчик на Python, заключается в необходимости преобразовать строку, представляющую собой список, обратно в список. Например, есть строка, которая выглядит как список:
x = '[ "A","B","C" , " D"]'
И требуется преобразовать ее в реальный список, учитывая пробелы между элементами и внутри кавычек:
x = ["A", "B", "C", "D"]
Использование встроенной функции eval()
Самым простым и прямолинейным способом преобразования строки, представляющей список, в реальный список является использование встроенной функции Python eval() . Эта функция анализирует строку и выполняет ее как выражение Python.
x = '[ "A","B","C" , " D"]' x = eval(x)
Однако, стоит учесть, что использование eval() не рекомендуется из-за возможных проблем безопасности. Если строка, которую необходимо преобразовать, приходит из ненадежного источника, она может содержать вредоносный код.
Использование модуля ast
Более безопасным способом преобразования строкового представления списка в список является использование функции literal_eval() из модуля ast . Эта функция анализирует строку и выполняет ее как выражение Python, но с ограничением только на простые типы данных, такие как числа, строки, списки, кортежи и словари.
import ast x = '[ "A","B","C" , " D"]' x = ast.literal_eval(x)
Такой подход исключает выполнение вредоносного кода, который может быть встроен в строку. Вместе с тем, он позволяет безопасно преобразовывать строковые представления списка в реальные списки.
