2013-02-14 89 views
-1

我有包含數字的字符串和文字 我想只有那些字符串轉換列表的列表號碼漂浮嵌套列表將字符串轉換爲浮動

aList= [ ["hi", "1.33"], ["bye", " 1.555"] ] 
+8

確定。你有什麼'嘗試'? (*提示*) – mgilson 2013-02-14 22:52:59

回答

3

首先,你需要一個功能一個具有「字符串轉換爲浮動如果可能的話,否則,把它作爲一個字符串」:

def floatify(s): 
    try: 
     return float(s) 
    except ValueError: 
     return s 

現在,你可以調用每個值,可以產生一個新的列表,或修改舊的地點。

既然你有一個嵌套列表,這意味着一個嵌套的迭代。您可能要通過明確這樣做的兩個步驟開始:

def floatify_list(lst): 
    return [floatify(s) for s in lst] 

def floatify_list_of_lists(nested_list): 
    return [floatify_list(lst) for lst in nested_list] 

當然,你可以它合併成一個功能只是通過使floatify_list局部功能:

def floatify_list_of_lists(nested_list): 
    def floatify_list(lst): 
     return [floatify(s) for s in lst] 
    return [floatify_list(lst) for lst in nested_list] 

您還可以通過做用內部表達式代替函數調用。如果你不知道如何自己做,我建議不要這樣做,因爲你不太可能理解它(複雜的嵌套列表理解對於專家來說很難理解),但是如果你必須:

def floatify_list_of_lists(nested_list): 
    return [[floatify(s) for s in lst] for lst in nested_list] 

或者,如果你喜歡你的Python看起來像嚴重變相哈斯克爾:

def floatify_list_of_lists(nested_list): 
    return map(partial(map, floatify), nested_list) 
+1

有時我希望有一個類似三態的異常處理:'嘗試float(s)除(ValueError,TypeError)s'類的東西... – mgilson 2013-02-14 22:54:42

+0

@mgilson:你可以很容易地寫功能。請參閱http://ideone.com/trX7EX以獲取idea.v(您可以'嘗試(浮動)'來使本例更簡單。) – abarnert 2013-02-14 22:56:05

+0

當然。我可以用條件表達式做同樣的事情:'def ifify(x,condition,y):if condition:return x; return y' :) - 你的函數雖然很整潔。我喜歡它。 – mgilson 2013-02-14 22:59:26