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)

Как весело, как понимание списка, я считаю это менее ясным в этом случае.