2013-03-28 21 views
1

我可以通過幾種方法將%轉換爲十進制,例如使用正則表達式提取int部分,除以100或者拆分'%'int()第一部分。但是我想知道是否有更加pythonic的方式來做到這一點?Pythonic從3%得到.03的方法

+2

呃,是如何解析的數量不是 「Python化」? – 2013-03-28 02:22:46

回答

3

右鍵條的百分比,解析浮法,再除以100:

float(your_string.rstrip('%'))/100.0 

這將允許多個%,不過,這可能是也可能不是一件好事。如果您知道的最後一個字符將總是%,你可以切串:

float(your_string[:-1])/100.0 
+0

由於它避免了一個函數調用,可能也是pythonic來執行'your_string [: - 1]',但是你的情況並沒有考慮到沒有'%'的數字。 – Serdalis 2013-03-28 02:26:55

+1

@Serdalis:'[:-1]'沒有真正的函數調用;它會調用'__getitem__',傳遞一個'slice'對象。 – icktoofay 2013-03-28 02:28:58

+1

@Serdalis'.rstrip('%')'更清晰明確。較短的代碼並不意味着更多的pythonic – jamylak 2013-03-28 03:07:46

0

的數量應該有一個(也是唯一一個)% - 符號,並在該年底字符串:

def perc2num(p): 
    p = p.strip() # get rid of whitespace after the % 
    if p.endswith('%') and p.count('%') == 1: 
     return float(p[:-1]) 
    else: 
     raise ValueError('Not a percentage.') 

float()轉換將刪除數字和%之間的空格。

測試:

In [11]: perc2num('3.5%') 
Out[11]: 3.5 

In [12]: perc2num('-0.2') 
--------------------------------------------------------------------------- 
ValueError        Traceback (most recent call last) 
<ipython-input-12-9a6733e653ff> in <module>() 
----> 1 perc2num('-0.2') 

<ipython-input-10-44f49dc456d1> in perc2num(p) 
     3   return float(p[:-1]) 
     4  else: 
----> 5   raise ValueError('Not a percentage.') 

ValueError: Not a percentage. 

In [13]: perc2num('-7%') 
Out[13]: -7.0 

In [15]: perc2num(' 23%') 
Out[15]: 23.0 

In [16]: perc2num(' 14.5 %') 
Out[16]: 14.5 

In [17]: perc2num(' -21.8 % ') 
Out[17]: -21.8