Уведомления

Группа в Telegram: @pythonsu

#1 Июль 10, 2012 19:38:15

Archie
Зарегистрирован: 2012-07-09
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг строки на наличие числа

Приветствую!

У меня есть список и такие значения

 ["215", "string", "22", "John"]

Как перебирая этот список определить что “215” и “22” это строки из чисел.

Столкнулся с такой проблемой если перебирать список и преобразовать например так:
"215" -> int() -> isinstance(int(num), int) -> True

Отлично, правда если
"John"  -> int()  -> [b]Error[/b]

Отредактировано Archie (Июль 10, 2012 22:15:22)

Офлайн

#2 Июль 10, 2012 19:52:43

EBFE
Зарегистрирован: 2012-07-03
Сообщения: 99
Репутация: +  20  -
Профиль   Отправить e-mail  

Парсинг строки на наличие числа

>>> def is_num(candidate):
...   try:
...     float(candidate)
...     return True
...   except ValueError:
...     return False
...
>>> map(is_num,['0x20','-1.02','0xJohn','foo'])
[False, True, False, False]
или если все числа в {N}:
>>> "42".isdigit()
True
>>> "John".isdigit()
False
>>> "-2".isdigit()
False
>>> "0x2".isdigit()
False

Отредактировано EBFE (Июль 10, 2012 20:44:37)

Офлайн

#3 Июль 10, 2012 20:37:33

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Парсинг строки на наличие числа

Archie, список не видно, оберните в

[code python][/code]

EBFE
return bool(float(candidate))
bool ни к чему, нужно просто ловить ValueError, иначе возможно такое:
In [1]: bool(float('0.0'))
Out[1]: False
Кроме того, что EBFE уже посоветовал, еще можно регулярные выражения использовать.

Офлайн

#4 Июль 10, 2012 20:50:20

EBFE
Зарегистрирован: 2012-07-03
Сообщения: 99
Репутация: +  20  -
Профиль   Отправить e-mail  

Парсинг строки на наличие числа

reclosedev
bool ни к чему, нужно просто ловить ValueError
Спасибо - все верно. Решил сэкономить строку
RegEx использовать конечно можно - но муторно очень (или искать готовый или долго и хорошо думать)

Офлайн

#5 Июль 10, 2012 21:05:54

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Парсинг строки на наличие числа

EBFE,

'^\d+$'

И не надо говорить про знак минус и точку. И про экспоненту :)
Всё просто. Но регулярки здесь не нужны.



Отредактировано fata1ex (Июль 10, 2012 21:08:52)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version