Python: Test if value can be converted to an int in a list comprehension

a 夏天 提交于 2021-02-07 04:47:50

问题


Basically I want to do this;

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

But row[x] is a text value that may or may not be convertible to an int

I'm aware that this could be done by:

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

But it'd be nice to do it is a one-liner.

Any ideas?


回答1:


If you only deal with integers, you can use str.isdigit():

Return true if all characters in the string are digits and there is at least one character, false otherwise.

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

Or if negative integers are possible (but should be allowed):

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

And of course this all works only if there are no leading or trailing whitespace characters (which could be stripped as well).




回答2:


What about using a regular expression? (use re.compile if needed):

import re
...
return [row for row in listOfLists if re.match("-?\d+$", row[x])]



回答3:


Or

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

or if you need to accept negative integers

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

As fun as list comprehension is, I find it less clear in this case.



来源:https://stackoverflow.com/questions/5606585/python-test-if-value-can-be-converted-to-an-int-in-a-list-comprehension

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!