我發現了Python中的//
運算符,它在Python 3中與floor進行了劃分。Python中是否有//等於//的運算符?
是否有一個與ceil分開的運算符? (我知道在Python 3中進行浮點除法的/
運算符。)
我發現了Python中的//
運算符,它在Python 3中與floor進行了劃分。Python中是否有//等於//的運算符?
是否有一個與ceil分開的運算符? (我知道在Python 3中進行浮點除法的/
運算符。)
你總是可以做它內聯以及
((foo - 1) // bar) + 1
在python3,這只是害羞一個數量級比迫使浮分工,並要求小區()快的,只要你關心的速度。你不應該這樣做,除非你已經通過使用證明了你需要。
>>> timeit.timeit("((5 - 1) // 4) + 1", number = 100000000)
1.7249219375662506
>>> timeit.timeit("ceil(5/4)", setup="from math import ceil", number = 100000000)
12.096064013894647
你可以做倒樓師:
def ceildiv(a, b):
return -(-a // b)
這工作,因爲Python's division operator does floor division(不像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]
哇!很聰明!這應該是可以接受的解決方案。 – apadana 2016-04-19 21:29:25
「除以當時的小區」是不是真的在數學常見的事,而''//基於整數除法,與模量操作。 – millimoose 2013-02-11 22:39:28
重要提示:你需要一個整型還是浮點型結果? – smci 2015-06-25 06:36:28
你應該改變對dlitz的接受答案。 math.ceil用於浮點數,它不適用於Python的任意精度長整數。 – endolith 2016-05-01 17:50:22