Python: проверить, может ли значение быть преобразовано в int в понимании списка - PullRequest
20 голосов
/ 09 апреля 2011

В основном я хочу это сделать;

return [ row for row in listOfLists if row[x] is int ]

Но строка [x] - это текстовое значение, которое может или не может быть преобразовано в int

Я знаю, чтоможет быть сделано:

try:
    int(row[x])
except:
    meh

Но было бы неплохо сделать это однострочно.

Есть идеи?

Ответы [ 3 ]

28 голосов
/ 09 апреля 2011

Если вы имеете дело только с целыми числами, вы можете использовать str.isdigit():

Вернуть true, если все символы в строке являются цифрами и хотя бы один символ, в противном случае - false.

[row for row in listOfLists if row[x].isdigit()]

Или, если отрицательные целые числа возможны (но должны быть разрешены):

row[x].lstrip('-').isdigit()

И, конечно, все это работает, только если нет начальных или конечных пробельных символов (которые также могут быть удалены).

1 голос
/ 09 апреля 2011

А как насчет использования регулярного выражения?(при необходимости используйте re.compile):

import re
...
return [row for row in listOfLists if re.match("-?\d+$", row[x])]
0 голосов
/ 19 сентября 2012

Или

return filter(lambda y: y[x].isdigit(), listOfLists)

или если вам нужно принять отрицательные целые числа

return filter(lambda y: y[x].lstrip('-').isdigit(), listOfLists)

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

...