【问题标题】:How can I return a list with only up to the second decimal place python?如何返回仅包含小数点后第二位 python 的列表?
【发布时间】:2021-08-06 13:00:14
【问题描述】:

我有以下值列表:

      value_list=[2.5655665, 3.151498745, 3.1, 0.9999999999]

我需要更新这个列表,只保留小数点后第二位。我希望结果是:

      print(value_list)

      [2.56, 3.15, 3.1, 0.99]

我尝试使用round()方法传递参数2,只保留到小数点后第二位。如下:

     value_list.round(2)

但是,出现错误信息:

     AttributeError: 'list' object has no attribute 'round'

我尝试将 value_list 转换为数组类型,如下所示:

     import numpy as np
     value_list = np.array(value_list).round(2)

这种方式可以工作,但它返回一个数组,我需要返回类型为列表。如何返回只有小数点后第二位的列表?

【问题讨论】:

  • 如果要将值保留为浮点数,则无法仅保留特定的小数位数。您可以 round 浮点值,但最接近的舍入浮点值可能仍包含比您喜欢的更多的小数位。您需要将它们转换为其他数据类型,例如字符串或 Decimal,以便对 exact 格式有发言权。
  • 大多数数学和元素方面的函数必须一一应用于列表。我喜欢列表推导,但map 也可以。或者对于操作链,请考虑生成器和itertools。列表方法只有 11 个,所以不难记住。

标签: python list numpy


【解决方案1】:

您可以使用地图并应用您认为合适的任何功能:

value_list=[2.5655665, 3.151498745, 3.1, 0.9999999999]
value_rounded = list(map(lambda x: float(format(x, '.2f')), value_list))
value_truncated = list(map(lambda x: float(str(x)[:str(x).index('.')+3]), value_list))
print(value_rounded)
print(value_truncated)

两种情况的输出:

[2.57, 3.15, 3.1, 1.0]
[2.56, 3.15, 3.1, 0.99]

【讨论】:

    【解决方案2】:

    浮点值不一定表示为四舍五入,但您可以这样打印:

    value_list = [2.5655665, 3.151498745, 3.1, 0.9999999999]
    for v in value_list:
       print("{:.2f}".format(v))
    

    您还可以使用Decimal 类型来确保值四舍五入:How can I format a decimal to always show 2 decimal places?

    然后,您可以创建一个四舍五入到小数点后第二位的值列表:

    value_list = [2.5655665, 3.151498745, 3.1, 0.9999999999]
    values_rounded = []
    for v in value_list:
       values_rounded.append(v.round(2))
    

    【讨论】:

      【解决方案3】:

      也许您想使用Decimal。首先,您需要在上下文中设置精度:

      from decimal import getcontext
      getcontext().prec=2
      

      然后转换:

      value_list = [Decimal(i) for i in value_list]
      

      如果您打印该列表,您仍然会看到所有其他数字:

      [Decimal('2.56556650000000008304823495564050972461700439453125'),
       Decimal('3.151498745000000045735077947028912603855133056640625'),
       Decimal('3.100000000000000088817841970012523233890533447265625'),
       Decimal('0.9999999998999999917259629000909626483917236328125')]
      

      但是,对于数学运算,您的精度将受到尊重;例如

      [i -1 for i in value_list]
      

      返回

      [Decimal('1.6'), Decimal('2.2'), Decimal('2.1'), Decimal('-1.0E-10')]
      

      【讨论】:

        【解决方案4】:
        value_list=[2.5655665, 3.151498745, 3.1, 0.9999999999]
        my_formatted_list = [ '%.2f' % elem for elem in value_list ]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-11-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-10
          相关资源
          最近更新 更多