查找是在列表中查找一个特定元素的方法,在程序设计中十分常见;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中分别查找5和3这两个元素,5有对应的匹配元素,返回5在list1中对应元素的下标1,3没有对应的匹配元素,查找函数返回-1。
综上所述,对于少量元素的列表,用线性查找就够了,因为其代码更简洁;但是如果对于大型数据列表,就比较适合用二分查找了,只不过需要对列表提前排序。