在Python中将浮点列表舍入为整数

时间:2016-02-26 12:14:43

标签: python list rounding

我有一个数字列表,我需要在继续使用列表之前将其舍入为整数。示例源列表:

private void Print()
{
    PrintDialog pdialog = new PrintDialog();
    if (pdialog.ShowDialog() == true)
    {
        // Save current layout
        Transform origTransform = LayoutTransform;
        Size oldWindowSize = new Size(ActualWidth, ActualHeight);

        // Get printer caps
        PrintCapabilities capabilities = pdialog.PrintQueue.GetPrintCapabilities(pdialog.PrintTicket);

        // Get size of the printer page
        var sz = new Size(capabilities.PageImageableArea.ExtentWidth, capabilities.PageImageableArea.ExtentHeight);

        // Calculate zoom level of window
        double ratio = Math.Min(sz.Width / ActualWidth, sz.Height / ActualHeight);

        //if (ratio < 1) // Uncomment this line if you dont want zoom out small window
        {
            LayoutTransform = new ScaleTransform(ratio, ratio);
        }

        Measure(sz);
        Arrange(new Rect(new Point(0,0), sz));
        pdialog.PrintVisual(this, "My Image");

        // Store old layout
        LayoutTransform = origTransform;
        Measure(oldWindowSize);
        Arrange(new Rect(new Point(0, 0), oldWindowSize));
    }
}

如何保存此列表,并将所有数字四舍五入为整数?

7 个答案:

答案 0 :(得分:8)

只需对列表理解的所有列表成员使用round函数:

myList = [round(x) for x in myList]

myList # [25, 193, 282, 88, 80, 450, 306, 282, 88, 676, 986, 306, 282]

如果您希望round具有某些预设n,请使用round(x,n)

答案 1 :(得分:6)

你可以使用内置函数round()和列表理解:

newlist = [round(x) for x in list]

您可以使用内置函数map()

newlist = map(round, list)

我不建议使用list作为名称,因为您要覆盖内置类型。

答案 2 :(得分:2)

如果您可以设置有效数字位数

new_list = list(map(lambda x: round(x,precision),old_list))

此外,如果您有列表列表,则可以这样做

new_list = [list(map(lambda x: round(x,precision),old_l)) for old_l in old_list]

答案 3 :(得分:1)

使用map函数的另一种方法。

您可以设置round的位数。

>>> floats = [25.0, 193.0, 281.75, 87.5, 80.5, 449.75, 306.25, 281.75, 87.5, 675.5,986.125, 306.25, 281.75]
>>> rounded = map(round, floats)
>>> print rounded
[25.0, 193.0, 282.0, 88.0, 80.0, 450.0, 306.0, 282.0, 88.0, 676.0, 986.0, 306.0, 282.0]

答案 4 :(得分:1)

NumPy非常适合处理此类数组。
只需Rectnp.around(list)即可。

答案 5 :(得分:0)

您可以使用python内置的round函数。

l = [25.0, 193.0, 281.75, 87.5, 80.5, 449.75, 306.25, 281.75, 87.5, 675.5,986.125, 306.25, 281.75]

list = [round(x) for x in l]

print(list)

输出结果为:

[25, 193, 282, 88, 80, 450, 306, 282, 88, 676, 986, 306, 282]

答案 6 :(得分:0)

为python3更新此命令,因为其他答案都利用python2的num_var返回一个map,而python3的list返回一个迭代器。您可以让map函数消耗list对象:

map

要以这种方式将l = [25.0, 193.0, 281.75, 87.5, 80.5, 449.75, 306.25, 281.75, 87.5, 675.5,986.125, 306.25, 281.75] list(map(round, l)) [25, 193, 282, 88, 80, 450, 306, 282, 88, 676, 986, 306, 282] 用于特定的round,则需要使用functools.partial

n