2013-02-14 91 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