【问题标题】:How to distinguish exponent and ordinary number如何区分指数和普通数
【发布时间】:2017-11-10 16:30:59
【问题描述】:

以下两个表达式返回True

'2'.isdigit()
chr(178).isdigit()

后者是指数。

我正在寻找一种方法来区分所有数字

【问题讨论】:

  • 呃...'0' <= c <= '9'?
  • ... 前提是 c 只是一个字符。当然,对于更长的字符串,您可以使用all(...)
  • 这实际上是一个有趣的问题。我一直以为每个isdigit号码都可以转换成int,但是这不行。

标签: python digit


【解决方案1】:

这是as documented

str.isdigit()

如果字符串中的所有字符都是数字,则返回 true 并且至少有一个字符,否则为假。 数字包括 需要特殊处理的十进制字符和数字,例如 兼容性上标数字。 这包括不能被 用于形成以 10 为底的数字,如 Kharosthi 数字。正式地, 数字是具有属性值 Numeric_Type=Digit 的字符 或 Numeric_Type=Decimal。

如果要检查python是否能够将字符串解析为数字,惯用的方法是使用try-except。

def is_really_digit(s):
   try:
      int(s)
      return True
   except ValueError:
      return False

【讨论】:

  • 谢谢!我想知道上面的建议'0' <= c <= '9'是否更快
  • 另一个建议更快,但两者都在几微秒内执行,因此差异仅在性能非常关键的代码中很重要。
  • “程序员会浪费大量时间来思考或担心程序中非关键部分的速度,而在考虑调试和维护时,这些提高效率的尝试实际上会产生强烈的负面影响。我们应该忘记小的效率,比如大约 97% 的时间:过早优化是万恶之源。然而,我们不应该放弃那关键的 3% 的机会。” (唐纳德·克努斯)
  • 谢谢,我以前看过这句话,但忘了是谁说的。我完全同意。
猜你喜欢
  • 2015-11-03
  • 2011-03-06
  • 1970-01-01
  • 2012-01-03
  • 2014-09-20
  • 2021-12-09
  • 1970-01-01
  • 1970-01-01
  • 2011-06-20
相关资源
最近更新 更多