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)


image.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)


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


目录
相关文章
|
2月前
|
Python
python之列表生成式
python之列表生成式
|
6月前
|
算法 开发者 索引
深入理解Python中的二分查找与bisect模块
深入理解Python中的二分查找与bisect模块
|
6月前
|
机器学习/深度学习 Python
Python中的列表生成式使用技巧
在Python中,列表生成式是一种非常强大的语法结构,可以极大地简化代码,提高编程效率。本文将介绍列表生成式的基本语法和使用技巧,帮助读者更好地掌握这一特性。
83 0
|
6月前
|
存储 C# Python
Python 教程之控制流(5)Python 中的 range() 与 xrange()
Python 教程之控制流(5)Python 中的 range() 与 xrange()
43 0
|
6月前
|
Python
Python 基础知识:什么是 Python 的列表解析(List Comprehension)?
Python 基础知识:什么是 Python 的列表解析(List Comprehension)?
167 1
|
6月前
python-sorted()函数
python-sorted()函数
44 0
|
6月前
|
数据采集 机器学习/深度学习 算法
Python小姿势 - # Python的字典排序
Python小姿势 - # Python的字典排序
|
索引 Python
Python Bisect
Python Bisect
110 0
Python Bisect
|
Python
Python中的Sort
Python中的Sort自制脑图介绍了sort 用法和Sorted 用法, sort 用法:sort()方法默认是直接比较列表中的元素的大小,并且总是用<号比较大小; 在sort()可以接受一个关键字参数,如 key。Key 需要一个函数作为参数,当设置了函数作为参数,每次都会以列表中的一个元素作为参数来调用函数,并且使用函数的返回值来比较元素的大小。 Sorted 用法:Sorted 是一个函数,和 sort()用法基本一致,但是 sorted 可以对任意的序列进行排序,并且使用 sorted()排序不会影响原来的对象,而是返回一个新的对象。
112 0
Python中的Sort
|
Python
Python循环器-itertools
Python循环器-itertools
107 0
Python循环器-itertools
下一篇
无影云桌面