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

发布于 2024-10-31 18:18:43 字数 265 浏览 3 评论 0原文

基本上我想这样做;

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

但 row[x] 是一个文本值,可能会或可能不会转换为 int

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

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

但如果它是单行代码,那就太好了。

有什么想法吗?

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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

雅心素梦 2024-11-07 18:18:43

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

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

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

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

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

当然,这一切只有在没有前导或尾随空白字符(也可以被删除)的情况下才有效。

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

欲拥i 2024-11-07 18:18:43

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

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

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])]
只是在用心讲痛 2024-11-07 18:18:43

或者

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

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

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

尽管列表理解很有趣,但我发现在这种情况下不太清楚。

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文