【问题标题】:Convert a list of floats to the nearest whole number if greater than x in Python如果在 Python 中大于 x,则将浮点数列表转换为最接近的整数
【发布时间】:2013-06-03 22:09:49
【问题描述】:

我是 Python 新手,我进行了研究,但没有走多远,因此发帖寻求帮助。

我有一个浮点数列表,仅当元素大于 0.50 时,我想将其四舍五入到最接近的整数。

list = [54.12,86.22,0.30,0.90,0.80,14.33,0.20]

预期结果:

list = [54,86,0.30,1,1,14,0.20]

【问题讨论】:

    标签: python list math int converter


    【解决方案1】:

    使用pythonconditional expression:

    [round(x) if x > 0.5 else x for x in lst] 
    

    例如:

    >>> [round(x) if x > 0.5 else x for x in lst] 
    [54.0, 86.0, 0.3, 1.0, 1.0, 14.0, 0.2]
    

    要准确得到它,我们需要从round 的输出构造一个int

    >>> [int(round(x)) if x > 0.5 else x for x in lst] 
    [54, 86, 0.3, 1, 1, 14, 0.2]
    

    【讨论】:

    • 好吧,起初你没有使用round 函数,这就是我发布答案的原因。现在我们有了相同的答案:)
    • @rantanplan -- 是的。我想我正在编辑你发布的内容,因为我没有注意到 OP 想要 rounding 而不是地板行为。
    • 是的,在回答和编辑方面,我会按照 SO 标准放慢速度。哦,好吧。
    • 感谢快速重播的家伙。如果列表包含作为字符串的浮点数,此代码是否也可以工作?如果这有意义吗?
    • @Boosted_d16 是的,如果你先将它们转换成浮点数。 int(round(float(x)))
    【解决方案2】:
    lst = [54.12,86.22,0.30,0.90,0.80,14.33,0.20]
    new_list = [int(round(n)) if n > 0.5 else n for n in lst]
    

    输出:

    In [12]: new_list
    Out[12]: [54, 86, 0.3, 1, 1, 14, 0.2]
    
    • list 是内置对象名称,不应重新分配

    【讨论】:

    • int(n+.5) 的可读性较差,但比 int(round(n)) 快 5 倍。 int(n+(.5, -.5)[n<0]) 可用于正数或负数,速度快 3 倍以上。
    • @dansalmo 您的更快版本确实很有趣,值得一提。我不确定我是否理解您关于重新分配内置 int 列表的评论。你能详细说明一下吗?
    • @dansalmo 没关系,我刚刚看到你的编辑。我不小心复制粘贴了 OP 的代码。感谢编辑。
    • 嘿,我注意到“In[...] Out[...]”让我想起了 Mathematica。是否有类似 Idle for python 的用户界面?
    • @GregS 我不了解 Mathematica。但是,如果您不了解ipython,请立即查看! ipython.org
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多