如何在Python中执行地板除法
在这个教程中,您将学习如何在Python中执行地板除法。您将使用Python的//运算符,Python的math模块中的floor函数等进行演示。
我们将首先概述Python中的算术运算符,并学习地板除法运算符//的工作原理。然后,我们将学习如何使用其他等效方法,包括来自math和operator模块的函数来执行地板除法。
让我们开始吧…
Python中的算术运算符
在Python中,您可以使用算术运算符对int和float数据类型的数字进行简单的算术运算。这些运算符操作数(即数字)并返回操作的结果。
下表总结了Python中的算术运算符及其工作原理:
运算符 | 语法 | 结果 |
加法(+) | num1+num2 |
返回num1 和num2 的和 |
减法(-) | num1-num2 |
返回num1 和num2 的差 |
乘法(*) | num1*num2 |
返回num1 和num2 的乘积 |
指数运算(**) | num1**num2 |
返回num1 的num2 次幂,即num1 num2 |
除法(/) | num1/num2 |
返回num1 除以num2 的结果,包括小数部分 |
地板除法(//) | num1//num2 |
返回num1 除以num2 的商 |
取模(%) | num1 % num2 |
返回num1 除以num2 的余数 |
让我们看一些使用这些算术运算符的例子。您可以在Python REPL或Geekflare’s online Python editor中尝试这些例子。
>>> num1 = 18
>>> num2 = 5
>>> num1 + num2
23
>>> num1 - num2
13
>>> num1 * num2
90
>>> num1 ** num2
1889568
在这个例子中,num1
是18,num2
是5。除法运算num1/num2
返回结果,包括小数部分。
数字5可以被18整除三次,余数为3。因此,地板除法运算num1//num2
给出商3,而取模运算符在这种情况下也给出余数3。
>>> num1/num2
3.6
>>> num1//num2
3
>>> num1 % num2
3
这应该让您了解到除法、地板除法和取模运算符的工作原理。接下来,我们将详细介绍地板除法运算符。
⚠️ 在Python 2中,除法运算(/)将结果截断为最接近的整数,类似于Python 3中的地板除法运算。本教程讨论的是Python 3.x中地板除法运算的工作原理。
使用//运算符进行地板除法
考虑一个带有被除数和除数的除法运算。在num1/num2
中,num1
是被除数,num2
是除数。要执行num1
和num2
的地板除法,请使用num1//num2
。
地板除法运算符(//)返回除法运算的商——根据操作数的数据类型,可以是整数或浮点数。
地板除法运算符不能确保结果始终为整数。如果被除数(num1)或除数(num2)中的任意一个是浮点数,则num1//num2的结果是一个浮点数。以下是一些示例。
>>> 18.0//5
3.0
>>> 10.0//4
2.0
>>> 15//4.0
3.0
如果需要结果为整数,则需要使用int()函数将其显式转换为整数:
>>> int(18.0//5)
3
>>> int(10.0//4)
2
>>> int(15//4.0)
3
底层发生了什么?
当使用地板除法运算符//时,会调用__floordiv__()(也称为dunder方法)。因此,您还可以在任何整数或浮点数上使用__floordiv__()方法,如下所示:
num1 = 18
num2 = 5
num1.__floordiv__(num2)
# 输出:3
使用operator.floordiv()进行地板除法
💡在Python中执行地板除法,还可以使用operator模块中的floordiv()函数。
Python的operator模块包含可以执行所有算术操作的高效函数的定义。因此,要执行地板除法,您还可以使用operator模块的floordiv()函数,而不是//运算符。
使用operator模块的floordiv()函数与使用地板除法运算符等效。
>>> import operator
>>> operator.floordiv(18,5)
# 输出:3
>>> operator.floordiv(12,5.0)
# 输出:2.0
使用math.floor()进行地板除法
floor()函数的工作原理是什么?
在数学中,floor()函数将任何实数x作为输入,并返回一个整数(结果)。这个结果是小于或等于实数x的最大整数。
为了更好地理解这一点,让我们举几个例子,并在数轴上可视化这些数字。
示例1:考虑数字2.3。小于或等于2.3的最大整数是2;因此floor(2.3)将返回2。
示例2:当处理负数时,可以应用相同的定义。考虑数字-1.7。小于或等于-1.7的最大整数是-2;因此floor(-1.7)将返回-2。
让我们使用math模块的floor()函数验证上述结果。
>>> from math import floor
>>> floor(2.3)
2
>>> floor(-1.7)
-2
要执行地板除法,可以使用num1/num2作为参数调用floor()函数。由于它将结果截断或向下舍入到最近的整数,它等效于地板除法操作。
可以显式从math模块导入floor()函数,如下所示:
from math import floor
num1 = 18
num2 = 5
floor(num1/num2)
# 输出:3
或者,您也可以仅导入math模块,然后使用math.floor()访问floor()函数。
import math
num1 = 18
num2 = 5
math.floor(num1/num2)
# 输出:3
与operator模块的floordiv()函数和地板除法运算符//不同,使用math.floor(num1/num2)可以确保结果是一个整数。这种方法使代码可读,消除了类型转换步骤。
import math
num1 = 18.0
num2 = 5
math.floor(num1/num2)
# 输出:3
Python中的地板除法示例
让我们通过一个实际例子总结我们的讨论:Binary search。✅
📑 二分查找是一种高效的搜索算法,它允许您在已排序的数组中以O(log n)的时间复杂度搜索目标元素,其中n是数组的大小。
该算法通过在每一步将搜索区间分成两半来工作。这取决于区间的中点是否与目标匹配(如果找到匹配,搜索将结束!)或者中点是否小于或大于目标。由于数组的大小在每一步都减半,中点并不总是等于一个整数。
itemlist = [5,7,18,21,34,45]
item = 7
考虑以下二分查找算法的实现。函数binary_search()
接受一个数字(item
)和一个列表(itemlist
),并在itemlist
中搜索item
的出现。
- 如果找到
item
,函数返回item
出现的索引。 - 否则,返回
None
。
def binary_search(item, itemlist):
# 获取列表的大小
listsize = len(itemlist) - 1
# 从列表的两端开始
lowerIdx = 0
upperIdx = listsize
while lowerIdx itemlist[midPt]:
lowerIdx = midPt + 1
else:
upperIdx = midPt - 1
if lowerIdx > upperIdx:
return None
该实现在功能上是正确的,只是我们没有考虑随着搜索的进行,midPt
不总是等于一个整数。
binary_search(item,itemlist)
如果我们调用该函数,将会遇到一个TypeError
,指出列表索引必须是整数或切片,而不是浮点数。
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
in
----> 1 binary_search(item,itemlist)
in binary_search(item, itemlist)
12
13 # 如果找到了item,则返回索引
---> 14 if itemlist[midPt] == item:
15 return midPt
16 # 否则获取下一个中点
TypeError: list indices must be integers or slices, not float
我们修改函数定义以使用地板除法运算符:
def binary_search(item, itemlist):
# 获取列表的大小
listsize = len(itemlist) - 1
# 从列表的两端开始
lowerIdx = 0
upperIdx = listsize
while lowerIdx itemlist[midPt]:
lowerIdx = midPt + 1
else:
upperIdx = midPt - 1
if lowerIdx > upperIdx:
return None
该函数返回找到的item 7的索引,即索引为1。
binary_search(item,itemlist)
# 输出: 1
结论
我希望这个教程能帮助你了解如何在Python中执行地板除法。以下是你学到的不同方法的总结:
- 在Python中,a operator b会执行由操作符定义的操作,a和b作为操作数,并返回操作的结果。
- 你可以使用Python的地板除法操作符//;a//b返回除法运算a/b的商。
- 另外,你可以使用Python的operator模块中定义的等效的floordiv()函数,语法如下:operator.floordiv(a,b),来获得a//b的结果。
- 上述所有方法都返回商,但数据类型可以是浮点数或整数,这取决于a和b的值。因此,你需要将返回值转换为整数。
- Python的math模块中的floor()函数也可以用来执行地板除法:math.floor(a,b)等同于a//b,并返回一个整数。当你希望结果是一个整数时,考虑使用math模块中的floor函数。
接下来,学习如何使用defaultdict in Python工作。 👩🏽💻