2014-12-08 13 views
0

У меня есть объединенная строка, соединенная запятой. Мне нужно разбить этот список на список, но тип списка должен строго целыми числами.Как сопоставить список целых чисел

doc[column] = map(int, [v for v in value.split(',') if v and len(v)])

ValueError: invalid literal for int() with base 10: ''

Я думал, что добавление if v и тогда, возможно, len(v) бы решить эту проблему. Как мне это сделать?

+0

изменения ', если v и LEN (v) 'to' if v.strip() ' –

ответ

5

Вам нужно проверить, что строки имеют только цифры. Вы можете использовать str.isdigit:

doc[column] = [int(v) for v in value.split(',') if v.strip().isdigit()] 

ПРИМЕЧАНИЕ: Выше не будет принимать отрицательное число. Чтобы справиться с этим, вам нужно больше условий.

UPDATE

обновленный ответ обрабатывать ' 1' случай:

>>> int(' 1') 
1 
>>> ' 1'.isdigit() 
False 
>>> ' 1'.strip().isdigit() 
True 

UPDATE в соответствии с комментарием OP в:

Чтобы быть полной, вам нужно попробовать float/int к посмотрите, можно ли преобразовать значение в тип.

Пример:

def try_float(x): 
    try: 
     float(x) 
     return True 
    except (TypeError, ValueError): 
     return False 

value = '1, 2.3, 4, 5, blah, 6.78' 
numbers = [float(x) for x in value.split(',') if try_float(x)] 
+1

@jonrsharpe, Спасибо за ваш комментарий. Я обновил ответ. – falsetru

+2

'' 1'.isdigit() 'будет ложным, но' int ('1') 'будет работать –

+0

@ behzad.nouri, Спасибо, что указали это. Я обновил ответ, чтобы использовать 'str.strip' для обработки этого случая. – falsetru

1

Сделать красиво именем функции:

def converts_to_int(value): 
    try: 
     int(value) 
     return True 
    except ValueError: 
     return False 

он короче использовать список понимание, чем использование карты:

doc[column] = [int(v) for v in value.split(',') if converts_to_int(v)] 
+0

Спасибо, но' isdigit' отлично работает для целых чисел. Я заметил, что мне нужно сделать это для поплавков. – Tjorriemorrie

+0

@Tjorriemorrie 'isdigit' отлично работает, если вы удаляете пробелы, а целые числа положительны. –

Смежные вопросы