将None更改为字符串列表中的Float(Python)

将None更改为字符串列表中的Float(Python),python,list,replace,nonetype,Python,List,Replace,Nonetype,我有一长串字符串,格式如下: [... (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')

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

    [...
    (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类型转换为float。如何将列表中的所有“无”更改为浮点0

我正在努力:

mylist = map(lambda x: 0 if x[0] == None, else x, mylist)
但是,我的语法有些地方出了问题-有人建议在整个列表的每个字符串的第一个元素中使用Pythonic替换all on Nones吗?

您可以使用:

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')]
代码的工作原理如下:因此,如果x[0]不是其他x,则我们使用
lambda x:(0.0,)+x[1:]作为映射函数执行映射

这是一个三元运算符:如果第一个元素
x[0]是None
,我们返回
(0.0,)+x[1://code>,因此我们构造了一个新的元组,其中
0.0
作为第一个元素,
x[1://code>作为剩余元素。如果第一个元素不是
None
,我们只需返回
x

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

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

您可以使用列表理解:

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')]

美丽的!谢谢