【问题标题】:In python, how to compare two numerical strings without casting them to int()?在 python 中,如何比较两个数字字符串而不将它们转换为 int()?
【发布时间】:2021-07-09 13:17:01
【问题描述】:

例如,在不使用 int() 和 def 的情况下检查它们是否大于、小于或等于彼此。

num1 = "67"
num2 = "1954"

【问题讨论】:

  • 为什么不会你使用int
  • 问题指定不要使用它
  • 为什么问题会指定不使用它?
  • 你需要这个来处理负数吗?

标签: python python-3.x string numbers string-comparison


【解决方案1】:

左填充零,然后按字典顺序比较字符串:

num1 = "67"
num2 = "1954"
if num1.zfill(10) < num2.zfill(10):
    print("67 is less than 1954")

请注意,左侧填充技巧使 2 个数字具有相同的字符串长度。所以我们正在做类似比较00671954 的事情,在这种情况下,字典顺序与数字顺序一致。

【讨论】:

  • 负数呢?
  • 如果用户输入一个数字而你不知道 len() 会是什么?
  • @schwobaseggl 很好的边缘案例,我没有想到这一点。填充逻辑会变得更复杂。
  • 是的,那么字典顺序也必须颠倒。这很尴尬
  • @desperate 假设你上面的评论是针对我的,你可以选择一个足够大的填充。填充的大小可能没有任何真正的上限。
【解决方案2】:

最简单的不用填充到未知长度:

if (len(num1), num1) < (len(num2), num2):
    print(num1, "<", num2)

【讨论】:

  • 负数不需要
  • 您能解释一下将变量放在括号中逗号之后的目的吗,例如 (len(num1), num1)?我是新手
  • 您不仅可以比较字符串,还可以比较长度和字符串的元组(对),在您的示例中:(2, "67") &lt; (4, "1954")。元组比较也按字典顺序工作,因为只有在第一个元素相同时才比较第二个元素。因此,较短的数字将始终被视为较小。长度相等的数字将按字母顺序进行比较。
  • 非常感谢
  • 此方法失败,例如num1 = '4'; num2 = '03'.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-28
相关资源
最近更新 更多