代码之家  ›  专栏  ›  技术社区  ›  Ksofiac

将None更改为在字符串列表中浮动(Python)

  •  3
  • Ksofiac  · 技术社区  · 7 年前

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

        [...
        (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吗?

    2 回复  |  直到 7 年前
        1
  •  4
  •   willeM_ Van Onsem    7 年前

    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
  •  0
  •   Mohamed Ali JAMAOUI    7 年前

    您可以使用列表理解:

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