Как найти числа в списке python?
Как вы брать из смешанного списка только числа, там 3 строки и несколько значений без кавычек, в комменатрии советуют isdigit но на числе почему ошибка
Ваш вопрос
Как вы брать из смешанного списка только числа, там 3 строки и несколько значений без кавычек, в комменатрии советуют isdigit но на числе почему ошибка
Если в списке уже находятся объекты разных типов, отбирайте числа проверкой типа, а не методом строки. Для обычных встроенных целых и дробных чисел подойдёт выражение [x for x in values if type(x) in (int, float)]. Оно сохранит порядок элементов и исключит строки, даже когда внутри строки записаны цифры. Вызов isdigit() относится к строкам: у целого числа такого метода нет, поэтому попытка вызвать его непосредственно у числа приводит к ошибке. Проверка isinstance(x, (int, float)) учитывает подклассы, но пропустит и логические значения True и False, поскольку bool наследуется от int. Если логические значения не должны считаться числами, исключите их отдельно или используйте точную проверку типа, как в первом примере. Число 0 нельзя отбрасывать обычным условием if x: его логическое значение ложно, хотя это полноценное число. Для более широкого набора числовых типов, например объектов сторонних библиотек, требуется определить нужные типы и правила отдельно. Строки вроде '12' можно преобразовать через int, но это уже другая задача: распознавание текста как числа. Она требует обработки ошибок, отрицательного знака, дробной части и принятого формата записи. Не смешивайте незаметно два правила, иначе список с текстовыми кодами вроде '0012' может потерять значимые ведущие нули. Начните с отбора уже числовых объектов и проверьте небольшой пример со строкой, положительным числом, нулём, отрицательным числом и логическим значением. Так будет понятно, соответствует ли результат вашему определению числа.
| Что лежит в списке | Что использовать |
|---|---|
Готовые числа int и float | Проверку типа |
| Строки с целыми числами | Преобразование через int с обработкой ошибки |
| Смешанные объекты | Сначала определить правило отбора |
Для вашего случая подходит [x for x in values if type(x) in (int, float)]. Ноль сохраняется, логические значения исключаются.
Пока нет премиум-вопросов в подборке
Не нашли то, что искали?
Задайте свой вопрос
Лучший ответ
Датахакер
Датахакер
Как найти числа в списке python?
Строки с цифрами пока специально оставил строками, это коды.