我有一个数字列表,我需要在继续使用列表之前将其舍入为整数。示例源列表:
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));
}
}
如何保存此列表,并将所有数字四舍五入为整数?
答案 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非常适合处理此类数组。
只需Rect
或np.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