Python:在列表推导中测试值是否可以转换为整数
基本上,我想做这个:
return [ row for row in listOfLists if row[x] is int ]
但是 row[x] 是一个文本值,它可能可以转换成整数,也可能不行。
我知道可以通过以下方式来实现:
try:
int(row[x])
except:
meh
不过如果能用一行代码完成就更好了。
有什么好主意吗?
3 个回答
1
或者
return filter(lambda y: y[x].isdigit(), listOfLists)
或者如果你需要接受负整数的话
return filter(lambda y: y[x].lstrip('-').isdigit(), listOfLists)
虽然列表推导式很有趣,但在这种情况下,我觉得它不太清晰。
1
那用正则表达式怎么样呢?(如果需要的话,可以使用 re.compile
):
import re
...
return [row for row in listOfLists if re.match("-?\d+$", row[x])]
52
如果你只处理整数,可以使用 str.isdigit()
这个方法:
这个方法会返回真(true),如果字符串里的所有字符都是数字,并且至少有一个字符;如果不是这样,就返回假(false)。
[row for row in listOfLists if row[x].isdigit()]
或者如果可能有负整数(但应该被允许的话):
row[x].lstrip('-').isdigit()
当然,这一切的前提是字符串的开头和结尾不能有空格(这些空格也可以去掉)。