Python:在列表推导中测试值是否可以转换为整数

36 投票
3 回答
48683 浏览
提问于 2025-04-16 15:24

基本上,我想做这个:

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()

当然,这一切的前提是字符串的开头和结尾不能有空格(这些空格也可以去掉)。

撰写回答