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)

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

相关文章
|
算法 索引 Python
Python数据结构与算法(8)---维护有序列表bisect
Python数据结构与算法(8)---维护有序列表bisect
258 0
Python数据结构与算法(8)---维护有序列表bisect
|
算法 Python
Python基础——bisect模块
这个模块对有序列表提供了支持,使得他们可以在插入新数据仍然保持有序。
351 0
|
算法 Python
每周一个 Python 模块 | bisect
bisect 模块,用于维护有序列表。实现了一个算法用于插入元素到有序列表。在一些情况下,这比反复排序列表或构造一个大的列表再排序的效率更高。Bisect 是二分法的意思,这里使用二分法来排序,它会将一个元素插入到一个有序列表的合适位置,这使得不需要每次调用 sort 的方式维护有序列表。
198 0
python之bisect模块, 有序列表插入数据
bisect是python的内置模块, 可以使用它来插入数据, 并且插入的数据不会影响列表的排序, **但是原有列表需要是有序的, 并且不能是倒序**.
|
7月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
1169 102
|
7月前
|
数据采集 机器学习/深度学习 算法框架/工具
Python:现代编程的瑞士军刀
Python:现代编程的瑞士军刀
453 104
|
7月前
|
人工智能 自然语言处理 算法框架/工具
Python:现代编程的首选语言
Python:现代编程的首选语言
353 103
|
7月前
|
机器学习/深度学习 人工智能 数据挖掘
Python:现代编程的首选语言
Python:现代编程的首选语言
335 82
|
6月前
|
Python
Python编程:运算符详解
本文全面详解Python各类运算符,涵盖算术、比较、逻辑、赋值、位、身份、成员运算符及优先级规则,结合实例代码与运行结果,助你深入掌握Python运算符的使用方法与应用场景。
451 3

推荐镜像

更多