比较两个包含数字的python字符串

发布于 2021-01-29 14:10:44

更新:我应该早点指定它,但是并非所有名称都只是浮点数。例如,其中一些以“ YT”为前缀。因此,例如“ YT1.1。所以,您遇到相同的问题,YT1.9
<YT1.11应该为真。我真的很惊讶字符串比较失败…。

您好,这应该是一个非常简单的问题,但我似乎找不到答案。我想按名称对一堆XL工作表进行排序。每个名称都是数字,但与教科书“节”的编号方式相同,这意味着第4.11节在4.10之后,在4.9和4.1之后。我以为只是将这些数字作为字符串进行比较就可以了,但是我得到了以下信息:

>>> s1 = '4.11'
>>> s2 = '4.2'
>>> s1> s2
False
>>> n1 = 4.11
>>> n2 = 4.2
>>> n1 > n2
False

如何比较这两个值,使4.11大于4.2?

关注者
0
被浏览
127
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    将名称转换为整数元组并比较元组:

    def splittedname(s):
        return tuple(int(x) for x in s.split('.'))
    
    splittedname(s1) > splittedname(s2)
    

    更新 :由于您的姓名显然可以包含数字以外的其他字符,因此您需要检查ValueError并保留所有无法转换为整数的值:

    import re
    
    def tryint(x):
        try:
            return int(x)
        except ValueError:
            return x
    
    def splittedname(s):
        return tuple(tryint(x) for x in re.split('([0-9]+)', s))
    

    要对名称列表进行排序,请使用以下命令splittedname作为键功能sorted

    >>> names = ['YT4.11', '4.3', 'YT4.2', '4.10', 'PT2.19', 'PT2.9']
    >>> sorted(names, key=splittedname)
    ['4.3', '4.10', 'PT2.9', 'PT2.19', 'YT4.2', 'YT4.11']
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看