简介:在Python中可以使用float("inf")、float("-inf")分别表示正无穷、负无穷。
特性:
1、inf 经过普通的加减乘除算术运算,结果也是 inf。
2、inf 乘以0会得到 not-a-number(nan)
3、inf外的其他数除以inf,会得到 0
4、不等式1: 所有数都比-inf大 所有数都比+inf小
5、不等式2: inf进行简单的运算 和本身相等。即无穷大的数,和无穷大的数 + 1, -1 类似的这样的简单操作后,依然是无穷大。
案例:
# -*- coding: utf-8 -*-
# inf 经过普通的加减乘除算术运算,结果也是 inf
data = float("inf")
# 加减乘除
r1 = data + 1
r2 = data - 1
r3 = data * 2
r4 = data / 2
print(f"r1:{r1}, r2:{r2}, r3:{r3}, r4:{r4}")
# inf 乘以0会得到 not-a-number(nan):
r5 = data * 0
print(f"r5:{r5}") # r5:nan
# inf外的其他数除以inf,会得到 0
r6 = 8888 / data
r7 = -6666 / data
print(f"r6:{r6}, r7:{r7}") # r6:0.0, r7:-0.0
print(-6666 / data == 0) # True
# 不等式1: 所有数都比-inf大 所有数都比+inf小
print(-99999 > float("-inf")) # True
print(99999 < float("inf")) # True
# 不等式2: inf进行简单的运算 和本身相等。
# 即无穷大的数,和无穷大的数 + 1, -1 类似的这样的简单操作后,依然无穷大。
print(float("inf") - 1 == float("inf")) # True
综合案例:
# -*- coding: utf-8 -*-
# time: 2022/7/16 10:29
# file: test.py
# author: tom
# 公众号: 玩转测试开发
# 给你个整数数组 arr,其中每个元素都 不相同。
# 请你找到所有具有最小绝对差的元素对,并且按升序的顺序返回。
# 每对元素对 [a,b] 如下:
# a , b 均为数组 arr 中的元素
# a < b
# b - a 等于 arr 中任意两个元素的最小绝对差
# 示例 1:
# 输入:arr = [4,2,1,3]
# 输出:[[1,2],[2,3],[3,4]]
#
# 示例 2:
# 输入:arr = [1,3,6,10,15]
# 输出:[[1,3]]
from typing import List
class Solution:
def minimumAbsDifference(self, arr: List[int]) -> List[List[int]]:
# 第一遍求出绝对差最小的值。
# 第二遍放入列表
min_bas = float("inf")
arr.sort()
loop = len(arr)
for i in range(loop - 1):
if arr[i + 1] - arr[i] < min_bas:
min_bas = arr[i + 1] - arr[i]
return [[arr[i], arr[i + 1]] for i in range(loop - 1) if arr[i + 1] - arr[i] == min_bas]
if __name__ == '__main__':
s = Solution()
r = s.minimumAbsDifference([3, 8, -10, 23, 19, -4, -14, 27])
print(r)
综合案例中:inf这个无穷大的值的好处在于传入的列表参数可能会很大,在不知道的情况下,如何给定初值,有了inf这个值,第一次执行上面代码中的 if arr[i + 1] - arr[i] < min_bas: 语句时,无论绝对值差有多大,都一定会执行,将第一次得到的绝对值的差值赋给min_bas,然后再次判断时就有了真正的比较值。
发表评论