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

时间:2011-04-09 17:24:47

标签: types casting int python

基本上我想这样做;

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

但是row [x]是一个文本值,可以转换为int,也可以不转换为int

我知道这可以通过以下方式完成:

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

但这样做很好,这是一个单行。

有什么想法吗?

3 个答案:

答案 0 :(得分:26)

如果您只处理整数,则可以使用str.isdigit()

  

如果字符串中的所有字符都是数字且至少有一个字符,则返回true,否则返回false。

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

或者如果可能是负整数(但应该允许):

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

当然,只有在没有前导或尾随空格字符(也可以剥离)的情况下,这一切都有效。

答案 1 :(得分:1)

使用正则表达式怎么样? (如果需要,请使用re.compile):

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

答案 2 :(得分:0)

或者

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

或者如果你需要接受负整数

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

像列表理解一样有趣,我发现在这种情况下不太清楚。