Python: проверьте, может ли значение быть преобразовано в int в понимании списка
В основном я хочу это сделать;
return [ row for row in listOfLists if row[x] is int ]
Но строка [x] является текстовым значением, которое может быть или не быть конвертируемым в int
Я знаю, что это можно сделать:
try:
int(row[x])
except:
meh
Но было бы неплохо сделать это - однострочный.
Любые идеи?
Ответы
Ответ 1
Если вы используете только целые числа, вы можете использовать str.isdigit()
:
Возвращает true, если все символы в строке являются цифрами и есть хотя бы один символ, иначе false.
[row for row in listOfLists if row[x].isdigit()]
Или если отрицательные целые числа возможны (но должны быть разрешены):
row[x].lstrip('-').isdigit()
И, конечно же, все это работает только в том случае, если нет ведущих или завершающих пробельных символов (которые также могут быть удалены).
Ответ 2
Как использовать регулярное выражение? (при необходимости используйте re.compile
):
import re
...
return [row for row in listOfLists if re.match("-?\d+$", row[x])]
Ответ 3
или
return filter(lambda y: y[x].isdigit(), listOfLists)
или если вам нужно принять отрицательные целые числа
return filter(lambda y: y[x].lstrip('-').isdigit(), listOfLists)
Как весело, как понимание списка, я считаю это менее ясным в этом случае.