我試圖將應用程序版本號如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