1 累计计算函数
- reduce函数
将一个二元函数(接受两个参数的函数)应用于一个可迭代对象(如列表),从左到右对元素进行累积计算,最终得到一个单一的值。
from functools import reduce
reduce(function, iterable[, initializer])
function:一个接受两个参数的函数。
iterable:一个可迭代对象,如列表、元组等。
initializer(可选):初始值。
eg:累加
from functools import reduce
def add(x, y):
return x + y
s = [1, 2, 3, 4, 5]
res = reduce(add, s)
print(res)
# 15
- accumulate 函数
accumulate函数也用于累积计算,但它返回的是一个迭代器,其中每个元素表示从左到右的累积结果。它的语法如下
from itertools import accumulate
accumulate(iterable[, func])
iterable:一个可迭代对象,如列表、元组等。
func(可选):一个接受两个参数的函数,用于指定累积操作。默认为加法。
eg:累乘
from itertools import accumulate
def multi(x, y):
return x * y
numbers = [1, 2, 3, 4, 5]
result = list(accumulate(numbers, multi))
print(result) # 输出:[1, 2, 6, 24, 120]
二分函数
1)bisect_left函数
找到在有序列表中,保持列表排序状态的情况下,目标值应该插入的位置,使得所有小于目标值的元素都在其左侧。
具体表现为:返回第一个大于等于目标值的位置
- bisect_right函数
找到在有序列表中,保持列表排序状态的情况下,目标值应该插入的位置,使得所有大于目标值的元素都在其右侧。
具体表现为:返回第一个大于目标值的位置
eg:
import bisect
numbers = [1, 3, 4, 4, 6, 8]
# bisect_right example
print(bisect.bisect_right(numbers, 4)) # 输出: 4,因为4应该插入到索引4的位置,即在最后一个4的右侧
# bisect_left example
print(bisect.bisect_left(numbers, 4)) # 输出: 2,因为4应该插入到索引2的位置,即在第一个4的左侧