【问题标题】:Converting strings to floats in a nested list将字符串转换为嵌套列表中的浮点数
【发布时间】:2013-01-30 21:16:36
【问题描述】:

我有一个列表列表,其中包含数字和单词的字符串 我只想将那些数字字符串转换为浮点数

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

【问题讨论】:

  • 好的。你有什么tryed? (提示)

标签: python list nested


【解决方案1】:

首先,您需要一个函数来执行“如果可能,将字符串转换为浮点数,否则将其保留为字符串”:

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 看起来像伪装得很糟糕的 Haskell:

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

【讨论】:

  • 有时我希望有类似三元的异常处理:try float(s) except (ValueError,TypeError) s 之类的...
  • @mgilson:你可以很容易地把它写成一个函数。有关idea.v,请参见ideone.com/trX7EX(您可以partial 向上tryify(float) 使本例中的示例更加简单。)
  • 当然。我可以用条件表达式做同样的事情:def ifify(x,condition,y): if condition: return x;return y :) -- 你的函数有点整洁。我很喜欢。
  • @mgilson:是的,但我认为在这种情况下,用例不够普遍,功能版本也不够丑陋,因此需要新的语法。 (请记住,Guido 在条件表达式的情况下几乎没有发现它有足够的保证,所以他的容忍度甚至比我的还要低。)我确实认为这个函数在 stdlib 中很有用,或者至少是文档中的配方,但这个想法几年前在 python-ideas 上被否决了(就像最近的iter_with 一样)。所以,现在我只是在我发现自己经常需要它的任何项目中自己编写它,并最终给它一个不同的名字......
  • @abarnert 我怎样才能实现这个功能??
猜你喜欢
  • 2021-06-19
  • 1970-01-01
  • 1970-01-01
  • 2016-02-08
  • 2017-09-26
  • 1970-01-01
  • 2011-11-25
  • 2021-11-25
相关资源
最近更新 更多