Python中是否有//等于//的运算符?
我在Python 3中发现了关于Python中的//
运算符的事情。
有没有一个与ceil分开的操作符? (我知道在Python 3中进行浮点除法的/
运算符。)
没有与ceil分开的操作员。 你需要import math
和使用math.ceil
你可以做倒立的地板师:
def ceildiv(a, b): return -(-a // b)
这是有效的,因为Python的除法运算符做底点划分 (不同于在C中,整数除法截断小数部分)。
这也适用于Python的大整数,因为没有(有损)的浮点转换。
这是一个示范:
>>> from __future__ import division # a/b is float division >>> from math import ceil >>> b = 3 >>> for a in range(-7, 8): ... print(["%d/%d" % (a, b), int(ceil(a / b)), -(-a // b)]) ... ['-7/3', -2, -2] ['-6/3', -2, -2] ['-5/3', -1, -1] ['-4/3', -1, -1] ['-3/3', -1, -1] ['-2/3', 0, 0] ['-1/3', 0, 0] ['0/3', 0, 0] ['1/3', 1, 1] ['2/3', 1, 1] ['3/3', 1, 1] ['4/3', 2, 2] ['5/3', 2, 2] ['6/3', 2, 2] ['7/3', 3, 3]
当x
除以(x + (d-1)) // d
时,你可以做(x + (d-1)) // d
d
,即(x + 4) // 5
。
你总是可以直接做内联
((foo - 1) // bar) + 1
在python3中,如果你关心速度的话,这个速度要比强制float分割和调用ceil()快几个数量级。 你不应该这样做,除非你已经通过使用certificate了你需要。
>>> timeit.timeit("((5 - 1) // 4) + 1", number = 100000000) 1.7249219375662506 >>> timeit.timeit("ceil(5/4)", setup="from math import ceil", number = 100000000) 12.096064013894647
请注意,math.ceil限于53位的精度。 如果你使用大整数,你可能得不到确切的结果。
gmpy2库提供了一个使用天花板舍入的c_div
函数。
免责声明:我维护gmpy2。