Python Bisect

简介: Python Bisect

bisect是python内置模块,用于有序序列的插入和查找

  • 查找: bisect(array, item)
  • import bisect
  • 若数组a是升序序列
  • 使用总结:


bisect.bisect(a,c):返回数组a中最后一个<=c的索引值+1


若c存在于数组a,bisect.bisect_left(a,c)返回数组a中第一个出现c的索引值


若c不存在于数组a,bisect.bisect_left与bisect.bisect等效


若c存在于数组a,bisect.bisect_right(a,c)返回数组a中最后一个等于c的索引值+1


若c不存在于数组a,bisect.bisect_right与bisect.bisect等效


在查询一个有序的数组中有多少个>(<) c的时候,这个函数效率很高

import bisect
n=int(input())
a=list(map(int,input().split()))
b=list(map(int,input().split()))
c=list(map(int,input().split()))
a.sort()
c.sort()
ans = 0
for i in range(n):
  x=bisect.bisect_left(a,b[i])
  y=len(c)-bisect.bisect_right(c,b[i])
  ans += x*y
print(ans)

8a0aea1067114ce68639977d2c0d8ec6.png

这个代码是可以解决蓝桥杯一道真题:三元递增组,相较于用前缀和,代码量大大化简

前缀和代码:

n=int(input())
a=list(map(int,input().split()))
b=list(map(int,input().split()))
c=list(map(int,input().split()))
ans=[0 for i in range(max(a)+1)]
for i in a:
    ans[i]+=1
x=[0 for i in range(max(a)+1)]
x[0]=a.count(0)
for j in range(1,max(a)+1):
    x[j]=x[j-1]+ans[j]
cns=[0 for i in range(max(c)+1)]
for i in c:
    cns[i]+=1
y=[0 for i in range(max(c)+1)]
y[0]=c.count(0)
for j in range(1,max(c)+1):
    y[j]=y[j-1]+cns[j]
cnt=0
for k in range(n):
    if b[k]-1>len(x)-1:
        p=x[-1]
    elif b[k]-1<0:
        p=0
    else:
        p=x[b[k]-1]
    if len(y)-1<=b[k]:
        q=0
    else:
        q=y[-1]-y[b[k]]
    cnt+=p*q
print(cnt)

掌握一些内置的高效函数,大有裨益!

目录
打赏
0
0
0
0
12
分享
相关文章
Python数据结构与算法(8)---维护有序列表bisect
Python数据结构与算法(8)---维护有序列表bisect
142 0
Python数据结构与算法(8)---维护有序列表bisect
Python基础——bisect模块
这个模块对有序列表提供了支持,使得他们可以在插入新数据仍然保持有序。
144 0
每周一个 Python 模块 | bisect
bisect 模块,用于维护有序列表。实现了一个算法用于插入元素到有序列表。在一些情况下,这比反复排序列表或构造一个大的列表再排序的效率更高。Bisect 是二分法的意思,这里使用二分法来排序,它会将一个元素插入到一个有序列表的合适位置,这使得不需要每次调用 sort 的方式维护有序列表。
87 0
python之bisect模块, 有序列表插入数据
bisect是python的内置模块, 可以使用它来插入数据, 并且插入的数据不会影响列表的排序, **但是原有列表需要是有序的, 并且不能是倒序**.
Python 高级编程与实战:深入理解数据科学与机器学习
本文深入探讨了Python在数据科学与机器学习中的应用,介绍了pandas、numpy、matplotlib等数据科学工具,以及scikit-learn、tensorflow、keras等机器学习库。通过实战项目,如数据可视化和鸢尾花数据集分类,帮助读者掌握这些技术。最后提供了进一步学习资源,助力提升Python编程技能。
Python 高级编程与实战:深入理解设计模式与软件架构
本文深入探讨了Python中的设计模式与软件架构,涵盖单例、工厂、观察者模式及MVC、微服务架构,并通过实战项目如插件系统和Web应用帮助读者掌握这些技术。文章提供了代码示例,便于理解和实践。最后推荐了进一步学习的资源,助力提升Python编程技能。
Python 高级编程与实战:深入理解性能优化与调试技巧
本文深入探讨了Python的性能优化和调试技巧,涵盖使用内置函数、列表推导式、生成器、`cProfile`、`numpy`等优化手段,以及`print`、`assert`、`pdb`和`logging`等调试方法。通过实战项目如优化排序算法和日志记录的Web爬虫,帮助你编写高效稳定的Python程序。
Python 高级编程与实战:深入理解性能优化与调试技巧
本文深入探讨了Python的性能优化与调试技巧,涵盖profiling、caching、Cython等优化工具,以及pdb、logging、assert等调试方法。通过实战项目,如优化斐波那契数列计算和调试Web应用,帮助读者掌握这些技术,提升编程效率。附有进一步学习资源,助力读者深入学习。
Python 编程基础与实战:从入门到精通
本文介绍Python编程语言,涵盖基础语法、进阶特性及实战项目。从变量、数据类型、运算符、控制结构到函数、列表、字典等基础知识,再到列表推导式、生成器、装饰器和面向对象编程等高级特性,逐步深入。同时,通过简单计算器和Web爬虫两个实战项目,帮助读者掌握Python的应用技巧。最后,提供进一步学习资源,助你在Python编程领域不断进步。

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等