Ram*_*amy 5 python string numbers
更新:我应该尽早指定,但不是所有的名称都只是浮点数.例如,其中一些"前缀"为"YT".所以例如"YT1.1.所以,你有同样的问题YT1.9 <YT1.11应该是真的.我真的很惊讶字符串比较失败了....
你好,这应该是一个非常简单的问题,但我似乎无法找到答案.我想按名称排序一堆XL工作表.每个名称都是数字,但是教科书"部分"的编号方式相同,这意味着4.11之后的部分4.11出现在4.9和4.1之后.我想只是将这些数字作为字符串进行比较,但我得到以下内容:
>>> s1 = '4.11'
>>> s2 = '4.2'
>>> s1> s2
False
>>> n1 = 4.11
>>> n2 = 4.2
>>> n1 > n2
False
Run Code Online (Sandbox Code Playgroud)
如何比较这两个值,使4.11大于4.2?
Pär*_*der 12
将名称转换为整数元组并比较元组:
def splittedname(s):
return tuple(int(x) for x in s.split('.'))
splittedname(s1) > splittedname(s2)
Run Code Online (Sandbox Code Playgroud)
更新:由于您的名称显然可以包含除数字之外的其他字符,因此您需要检查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))
Run Code Online (Sandbox Code Playgroud)
要对名称列表进行排序,请将其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']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12103 次 |
| 最近记录: |