详解Python的列表查找方法——二分查找法与线性查找法

勒令课程 2024-03-16 01:01:41

查找是在列表中查找一个特定元素的方法,在程序设计中十分常见;Python常用的列表查找方法有两种:线性查找和二分查找,下面进行分别介绍:

1、线性查找法

线性查找法是指顺序地将关键元素和列表中的每一个元素进行比较,从而得到列表中与关键元素相匹配的元素的下标,即找到关键元素在列表中的对应位置。如果没有与之相匹配的元素,则查找返回-1。

list1=[2,5,6,8,9,-5]def linearSearch(list1,key): for i in range(len(list1)): if key == list1[i]: return i return -1print(linearSearch(list1,-5))print(linearSearch(list1,3))

该例中,在list1中分别查找-5和3这两个元素,-5有对应的匹配元素,返回-5在list1中对应元素的下标5,3没有对应的匹配元素,查找函数返回-1。

可以看出,假如关键元素在列表比较靠后的位置,线性查找需要检测的元素会比较多,特别是对于大型列表而言,里面的元素可能是数以亿级的数量,这时线性查找的效率其实是很低的。

2、二分查找法:

二分查找法适用于已经事先排好序的列表,该方法是首先将关键元素与列表的中间元素进行比较,假如列表已经是升序排列的:

如果关键元素小于列表的中间元素,那么只需在列表的前半部分继续查找如果关键元素等于列表的中间元素,那么查找结束如果关键元素大于列表的中间元素,那么只需在列表的后半部分继续查找

假如对一个有1024个元素的列表来说,最坏的情况下,二分查找只需要进行11次比较,而现行查找则需要进行1023次比较。

list1=[2,5,6,7,8,9,-5]def binarySearch(list1,key): low=0 high=len(list1)-1 while high>=low: mid=(low+high)//2 if key<list1[mid]: high=mid-1 elif key==list1[mid]: return mid else: low=mid+1 return -1print(binarySearch(list1,5))print(binarySearch(list1,3))

该例中,在list1中分别查找5和3这两个元素,5有对应的匹配元素,返回5在list1中对应元素的下标1,3没有对应的匹配元素,查找函数返回-1。

综上所述,对于少量元素的列表,用线性查找就够了,因为其代码更简洁;但是如果对于大型数据列表,就比较适合用二分查找了,只不过需要对列表提前排序。

欢迎点击右上方“关注”按钮,关注小编,获取更多Python图文或视频课程,如有疑问,欢迎大家在评论区留言,也可以私信小编。

0 阅读:0

勒令课程

简介:感谢大家的关注