在字符串列表中将无更改为浮点数(Python)

Posted

技术标签:

【中文标题】在字符串列表中将无更改为浮点数(Python)【英文标题】:Change None to Float in List of Strings (Python) 【发布时间】:2018-01-11 08:42:09 【问题描述】:

我有一长串格式如下的字符串:

    [...
    (0.5, 'house', 'flower'),
    (0.213, 'garden', 'flowerpot'),
    (None, 'mulch', 'hunting'),
    (0.9, 'flower', 'tulip'),
    (0.34, 'party', 'music'),
    (None, 'piano', 'trowel'),
    (0.138, 'fertilizer', 'cow')
    ...]

在我可以根据第一个元素对列表进行排序之前,我必须将 None 类型转换为浮点数。如何将列表中的所有 None 更改为浮动 0?

我正在尝试:

mylist = map(lambda x: 0 if x[0] == None, else x, mylist)

但是在某个地方我的语法有问题 - 任何人都建议在整个列表的每个字符串的第一个元素中用 Pythonic 替换所有的 Nones?

【问题讨论】:

【参考方案1】:

你可以使用:

list(map(lambda x: (0.0,)+x[1:] if x[0] is None else x,mylist))

产生:

>>> list(map(lambda x: (0.0,)+x[1:] if x[0] is None else x,mylist))
[(0.5, 'house', 'flower'), (0.213, 'garden', 'flowerpot'), (0.0, 'mulch', 'hunting'), (0.9, 'flower', 'tulip'), (0.34, 'party', 'music'), (0.0, 'piano', 'trowel'), (0.138, 'fertilizer', 'cow')]

代码的工作原理如下:因此我们使用lambda x: (0.0,)+x[1:] if x[0] is None else x作为映射函数进行映射。

这是一个三元运算符:如果第一个元素x[0] is None,我们返回(0.0,)+x[1:],所以我们构造一个新元组,0.0作为第一个元素,x[1:]作为剩余元素.如果第一个元素不是None,我们只需返回x

这适用于每个元组,因为它有至少一个元素。如果列表中有空元组,我们可以将表达式更改为:

list(map(lambda x: (0.0,)+x[1:] if x and x[0] is None else x,mylist))

【讨论】:

漂亮!谢谢!【参考方案2】:

你可以使用列表推导:

l = [(0.5, 'house', 'flower'),
    (0.213, 'garden', 'flowerpot'),
    (None, 'mulch', 'hunting'),
    (0.9, 'flower', 'tulip'),
    (0.34, 'party', 'music'),
    (None, 'piano', 'trowel'),
    (0.138, 'fertilizer', 'cow'),
]

l = [ (0.0,)+ x[1:] if x[0] is None else x  for x in l]

输出:

[(0.5, 'house', 'flower'), (0.213, 'garden', 'flowerpot'), (0.0, 'mulch', 'hunting'), (0.9, 'flower', 'tulip'), (0.34, 'party', 'music'), (0.0, 'piano', 'trowel'), (0.138, 'fertilizer', 'cow')]

【讨论】:

以上是关于在字符串列表中将无更改为浮点数(Python)的主要内容,如果未能解决你的问题,请参考以下文章

在汇编中将无符号字符转换为浮点数(为浮点向量计算做准备)

如何将列表中的字符串值更改为 Python 中的浮点数

在导入的 .csv 中将字符串更改为浮点数

Python如何检查列表中的项目是不是为浮点数,如果是,将其更改为字符串? [复制]

在 C++ 中将字符串转换为浮点数

在 C++ 中将浮点数转换为 std::string