私はPythonの演算子について、Python 3ではfloorで除算を行うPythonで見つけました。Pythonに//演算子の天井相当物はありますか?
代わりにceilで除算する演算子がありますか? (私は/
演算子はPython 3で浮動小数点除算を行います)
私はPythonの演算子について、Python 3ではfloorで除算を行うPythonで見つけました。Pythonに//演算子の天井相当物はありますか?
代わりにceilで除算する演算子がありますか? (私は/
演算子はPython 3で浮動小数点除算を行います)
ceilで除算する演算子はありません。すなわち(x + 4) // 5
、d
によってx
を分割するときは、import math
に必要とmath.ceil
あなたはいつも全く同じように、インライン
を行うことができます((foo - 1) // bar) + 1
、これは)速くフロート部門を強制し、(切り上げを呼び出すよりも一桁のちょうど内気である、あなたはスピードを気に提供。あなたが必要とする使用法によって証明されていない限り、あなたはしてはいけません。
>>> timeit.timeit("((5 - 1) // 4) + 1", number = 100000000)
1.7249219375662506
>>> timeit.timeit("ceil(5/4)", setup="from math import ceil", number = 100000000)
12.096064013894647
あなただけ逆さまフロア分裂を行うことができます。Python's division operator does floor division(整数の除算は、小数部分を切り捨てC、とは異なり)ので
def ceildiv(a, b):
return -(-a // b)
これは動作します。
これは、(損失の多い)浮動小数点変換がないため、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
「除算当時はceil」は本当に数学では一般的なものではありません。
はここでデモです。 – millimoose
重要:intまたはfloatの結果が必要ですか? – smci
あなたは受け入れられた答えをdlitzに変更する必要があります。 math.ceilは浮動小数点数用ですが、Pythonの任意精度のlong intでは動作しません。 – endolith