我试图将应用程序版本号如5.3.0.1(Android)和5.3.0(iOS)转换为Python中的整数。该函数应该为Android提供5301的输出值,为iOS提供530。如何将版本号转换为整数值?
我写了下面的代码,但希望使其体积更小,更好:
version = "5.3.0"
num = (version).split('.')
for i in num:
version += i
print version
建议我一些更好的选择!
我试图将应用程序版本号如5.3.0.1(Android)和5.3.0(iOS)转换为Python中的整数。该函数应该为Android提供5301的输出值,为iOS提供530。如何将版本号转换为整数值?
我写了下面的代码,但希望使其体积更小,更好:
version = "5.3.0"
num = (version).split('.')
for i in num:
version += i
print version
建议我一些更好的选择!
version = "5.3.0"
int(version.replace(".", ""))
# 530
这应该工作,只要该版本不以0开头,否则,不要将它们转换为整数。
为什么领先的0是一个问题?我不认为有大约除非你如果转换从0开始转变为int一个字符串指定基本为0。 – jszakmeister
,0取出它被视为八进制的任何问题。 – UnsignedByte
为什么那么重要?这是一个整数,可能你会将它与一个整数进行比较。 :-)什么是导入的版本进行比较,你所希望的方式,他们将只要每个组件是9个或更少。 – jszakmeister
也许一些更直接:
major, minor, patch = [int(x, 10) for x in version.split('.')]
上述会给你的版本号的每个组件。你也可以这样做:
l = [int(x, 10) for x in version.split('.')]
l.reverse()
version = sum(x * (100 ** i) for i, x in enumerate(l))
这将允许版本号的每个组件在0到99(而不是0到9)之间变化。在C中记录版本号是相当普遍的做法。
如果你真的只想要处理的版本,在0〜9范围内的部件,只需更改100到10:
l = [int(x, 10) for x in version.split('.')]
l.reverse()
version = sum(x * (10 ** i) for i, x in enumerate(l))
我仍然认为这是更复杂的算法。我喜欢用替代:)干得好,虽然 – UnsignedByte
嗯,这是比什么OP问一个稍微不同的解决方案。在这里,您可以单独获取每个组件,而不是将所有组件合并为一个整数 - 至少是我提供的第一个解决方案谢谢你的荣誉。 :-) – jszakmeister
将组件分离出来是**正确**的方式来做到这一点。 – TemporalWolf
这是否适合您?
int(''.join(x for x in version.split('.')))
'x for x in' does not add anything to the solution ...'ver.split(“。”)== list(x for ver.split(“。”))''True' – TemporalWolf
...和'''.join(version.split('。'))'等于'version.replace('。','')'。 – jszakmeister
谢谢你让我知道。我对Python还是比较新的。 @TemporalWolf –
这可以通过使用一个相当简单的生成器表达式来完成:
>>> version = "5.3.0"
>>> int(''.join(c for c in version if c != '.'))
530
>>>
或者,你可以简单地使用.split()
并保存自己的步骤:
>>> version = "5.3.0"
>>> int(''.join(version.split(".")))
530
>>>
万一表演很重要,下面是从不同的答案编译的各种方法的时间表:
Method: int(version.replace(".", ""))
Time: 0.4673201900150161
---------
Method: int(''.join(x for x in version.split('.')))
Time: 1.2946192430099472
---------
Method: int(''.join(c for c in version if c != '.'))
Time: 1.248846340982709
---------
Method: int(''.join(version.split(".")))
Time: 0.5846817549900152
---------
Method: [int(x, 10) for x in version.split('.')]
Time: 1.2502875960199162
声明:我不赞同,赞扬或推荐上述任何解决方案。信用归功于原作者。以上图表的目的是为了给OP一个相当准确的测量每种方法的性能。
这样做,这将是最简单的方法简单地
version = "5.3.0"
int(version.replace(".", ""))
这将使你530
但是,如果版本0开始,例如version = 0.1.1
,你应该简单地做
version.replace(".", "")
避免在前面丢掉0。
这不是一个整数,而是一个字符串。 – DyZ
在Python 2 ,使用translate
方法:
version = "5.3.0"
print "Prior:",version
version = int(version.translate(None, '.'))
print "After:",version
其中给出:
Prior: 5.3.0
After: 530
在Python3,
可比脚本将是:
version = "5.3.0"
print("Prior:",version)
version = int(version.translate({ord('.'): None}))
print("After:",version)
'INT( “”。联接(version.split( “”)))'' – Li357
INT( ''。加入(version.split( '')))'不要忘记真正使它一个号码。 – TemporalWolf
要小心......如果任何组件都可以> 9,转换可能会导致歧义,例如是'5100'相当于'5.10.0'还是'5.1.0.0'? – ThisSuitIsBlackNot