2013-03-02 57 views
9

我經常用一個看起來像這樣的列表中找到自己:字符串轉換的子集,以整數列表中的

lst = ['A', '1', '2', 'B', '1', 'C', 'D', '4', '1', '4', '5', 'Z', 'D'] 

什麼是特定字符串轉換在此列表中整數最Python的方式?

我通常做這樣的事情:

lst = [lst[0], int(lst[1]), int(lst[2]), lst[3], ...] 

上述方法似乎是錯誤的。有沒有更好的方法來將列表中的某些項目轉換爲整數?

回答

10

我會這樣說:

>>> lst = ['A', '1', '2', 'B', '1', 'C', 'D', '4', '1', '4', '5', 'Z', 'D'] 
>>> lst = [int(s) if s.isdigit() else s for s in lst] 
>>> lst 
['A', 1, 2, 'B', 1, 'C', 'D', 4, 1, 4, 5, 'Z', 'D'] 
+0

可以這樣也應用於浮動?我找不到相應的'isfloat()'方法。 – turtle 2013-03-02 22:51:59

+0

對於更通用的目的,您可以編寫一個正則表達式來匹配或者像@JFSebastian那樣做,並將轉換封裝在實用函數的try/except塊中。 – FatalError 2013-03-02 22:55:35

5

int.isdigit可以在統一的情況下,即不同意,int可能無法解析的字符串一個字符串,即使.isdigit回報True

def maybe_int(s): 
    try: 
     return int(s) 
    except ValueError: 
     return s 

lst = [maybe_int(s) for s in lst] 
0

@FatalError答案可能是你在找什麼,但如果你想只將一些項目(並非所有的數字)爲整數,你可以做這樣的事情:

>>> lst = ['A', '1', '2', 'B', '1', 'C', 'D', '4', '1', '4', '5', 'Z', 'D'] 
>>> indices = [1,2] 
>>> [int(lst[x]) if x in indices else lst[x] for x in xrange(len(lst))] 
['A', 1, 2, 'B', '1', 'C', 'D', '4', '1', '4', '5', 'Z', 'D'] 
相關問題