【问题标题】:Round list values with list comprehension including None [duplicate]具有列表理解的圆形列表值,包括无 [重复]
【发布时间】:2020-03-17 18:16:04
【问题描述】:

我想舍入忽略无的列表值。

给定一个没有 None 值的列表,我会这样做:

import math        
value_list = [1.5, 2.3, 3.2, 4.7]
rounded_list = [math.floor(elem) for elem in value_list]

包含 None 值的列表会出错:

import math        
value_list = [1.5, 2.3, None, 4.7]
rounded_list = [math.floor(elem) for elem in value_list]
TypeError: must be real number, not NoneType

我有这个解决方案,但我想知道,是否有一个单线解决方案

import math 
value_list = [1.5, 2.3, None, 4.7]

for i in range(len(value_list)):
    try:
        value_list[i] = math.floor(value_list[i])
    except:
        pass    

【问题讨论】:

  • 您想将None 值保留在舍入列表中吗?
  • 你真的想要roundfloor 的数字,如果是后者,你想要floor 朝向更低还是朝向负数为零?根据具体情况,您可能需要分别使用roundfloorint
  • 我会说这不是一个很好的骗局......
  • 没有三元组,你也可以使用[x and math.floor(x) for x in value_list] 不是说你应该使用这个,但是你可以...
  • 非常感谢您迟到的回复。是的,我想保留 None 值。不知道,为什么它被标记为重复,因为相关的问题正在跳过 None 值。

标签: python list list-comprehension nonetype floor


【解决方案1】:

选项 1. 包括无的四舍五入值

rounded_list = [None if elem is None else math.floor(elem) for elem in value_list]

选项 2. 不带无的舍入值

rounded_list = [math.floor(elem) for elem in value_list if not elem is None]

【讨论】:

  • 第一个将0.0转换为None(最好是if elem is Noneelse elem),第二个将删除所有None(还有0.0
  • @tobias_k--谢谢你的提示。已更正。
  • 您应该使用isNone 进行比较。见python.org/dev/peps/pep-0008/#programming-recommendations
  • @yatu--谢谢,更正了。
【解决方案2】:
import math

value_list = [1.5, 2.3, None, 4.7]
rounded_list = [None if x is None else math.floor(x) for x in value_list]
print(rounded_list)

打印:

[1, 2, None, 4]

【讨论】:

    【解决方案3】:

    您可以像这样为None 添加支票:

    import math        
    value_list = [1.5, 2.3, None, 4.7]
    rounded_list = [math.floor(elem) for elem in value_list if elem is not None]
    
    print(rounded_list)
    >>> [1, 2, 4]
    

    编辑
    如果您想保留 None 值,您可以这样做:

    import math        
    value_list = [1.5, 2.3, None, 4.7]
    rounded_list = [math.floor(elem) if elem is not None else None for elem in value_list]
    
    print(rounded_list)
    >>> [1, 2, None, 4]
    

    【讨论】:

    • 我认为 OP 想保留None,不过...
    • @tobias_k 哦,好的,谢谢。
    猜你喜欢
    • 2016-09-04
    • 1970-01-01
    • 2019-08-13
    • 1970-01-01
    • 2018-04-12
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多