0518Python基础-内置函数-二分查找

1、昨日内容回顾

len() 测试个数

eval() 去掉字符串的引号,返回内部结果

eval(‘1+1‘) ---> 2

exec() 去掉字符串的引号,执行内部代码

ret = ‘‘‘ if True:

print(666)

‘‘‘

exec(ret)

range

next()

iter()

reversed() 返回的是迭代器

sorted(iterable,key,reverse)  return list       key

zip(iter1,iter2,iter3....) 拉链方法  迭代器

map(key,iterable) 循环模式。[i for i in iterable] 返回的是迭代器。     key

filter(key,iterable) 筛选模式[i for i in iterable if ...] 返回的是迭代器。   key

min() 最小值,返回是int str。    key

sum(iterable,argv) 求和。

max() 最大值。返回是int str。    key

open() 文件操作

repr 原形毕露。

divmod(被除数,除数)    返回值(商,余数)

dir()

abs() 绝对值。

callable

bytes()   str ---> bytes

locals() 当前位置的局部变量。

globals() 全局变量。

2、递归函数

递归函数:在一个函数里在调用这个函数本身。自己调用自己

递归的最大深度:998

修改默认递归深度

import sys

sys.setrecursionlimit(100000)

可以通过这种方式来修改递归的最大深度,刚刚我们将python允许的递归深度设置为了10w,至于实际可以达到的深度就取决于计算机的性能了。不过我们还是不推荐修改这个默认的递归深度,因为如果用997层递归都没有解决的问题要么是不适合使用递归来解决要么是你代码写的太烂了~~~

def foo(n):

print(n)

n += 1

foo(n)

foo(1)

‘‘‘

n = 1  太白   age(1) = 23

n = 2  日天   age(2) = age(1) + 2

n = 3  wusir  age(3) = age(2) + 2

n = 4  alex  age(4) = age(3) + 2

‘‘‘

def age(n):

if n == 1:

return 23

else:

return age(n-1) + 2

print(age(4)) # 23 + 2 + 2 + 2

"""

def age(4):

if n == 1:

return 23

else:

return age(n-1) + 2        age(4) =  age(3) + 2

ret = age(4)

def age(3):

if n == 1:

return 23

else:

return age(n-1) + 2        age(3) = age(2) + 2

def age(2):

if n == 1:

return 23

else:

return age(1) + 2          age(2) = age(1) + 2

def age(1):

if n == 1:

return 23                   age(1) = 23

else:

return age(1) + 2

"""

3、二分查找

l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]

你观察这个列表,这是不是一个从小到大排序的有序列表呀?

如果这样,假如我要找的数比列表中间的数还大,是不是我直接在列表的后半边找就行了?

这就是二分查找算法!

那么落实到代码上我们应该怎么实现呢?

简单版二分法

l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]

print(l.index(66))

count = 0

for i in l:

if i == 66:

print(count)

count += 1

for i in range(len(l)):

if l[i] == 47:

print(i)

break

else:

print(‘找不到....‘)

‘‘‘

目标值:aim = 66

寻找中间索引: min_index = len(l) // 2

aim 与 中间索引对应的值进行比较

aim > l[min_index]:

l[min_index+1:]

aim < l[min_index]:

l[:min_index-1]

aim == l[min_index]

return min_index

‘‘‘

升级版二分法

l1 = [1, 3, 5, 7, 8, 10, 11]

def binary_search(li,aim,start=0,end=None):      # 第一次:[1, 3, 5, 7, 8, 10, 11] aim 6,start 0,end 6

第二次:[1, 3, 5, 7, 8, 10, 11] aim 6 start:0,end:3

第三次:[1, 3, 5, 7, 8, 10, 11] aim 6 start:2,end:3

第四次:[1, 3, 5, 7, 8, 10, 11] aim 6 start:3,end:3

第五次:[1, 3, 5, 7, 8, 10, 11] aim 6 start:3,end:3

end = len(li)  if end is None else end

mid_index = (end - start) // 2 + start # 第一次 mid 3  第二次:mid 1  第三次:mid:2  第四次:mid:3

if start <= end:

if aim > li[mid_index]:

return binary_search(li, aim, start=mid_index+1, end=end)  # 第二次:[1, 3, 5, 7, 8, 10, 11] aim 6 start: 2 end:3

第三次:[1, 3, 5, 7, 8, 10, 11] aim 6 start: 3 end:3

elif aim < li[mid_index]:

return binary_search(li, aim, start=start, end = mid_index) # 第一次:[1, 3, 5, 7, 8, 10, 11] aim 6 start:0,end:3

第四次:[1, 3, 5, 7, 8, 10, 11] aim 6 start:3,end:3

elif aim == li[mid_index]:

return mid_index

else:

return None

print(binary_search(l1,3))

print(binary_search(l1,11))

原文地址:https://www.cnblogs.com/dzh0394/p/9057919.html

时间: 2024-08-30 06:01:38

0518Python基础-内置函数-二分查找的相关文章

Python菜鸟之路一:Python基础-内置函数补充

常用内置函数及用法: 1. callable() def callable(i_e_, some_kind_of_function): # real signature unknown; restored from __doc__ """检查对象object是否可调用.如果返回True,object仍然可能调用失败:但如果返回False,调用对象ojbect绝对不会成功 Return whether the object is callable (i.e., some kin

Python基础——内置函数

课前梗概 学到这里,大家是不是在想一个问题,我们之前一直用到的简单语法中会有,iut(),print(),len(),input()…………等等,你们是否想过,我们在使用之前没有做什么定义操作而是自然而然用到了,非常自然,这到底是什么情况?它们到底是什么东西呢? 其实,这些函数都是一个名为 builtins模块已经封装定义好的函数,而且这个模块在安装python环境的时候就默认导入了,所以我们可以直接使用. 这些函数,在python我们也称之为“内置函数”. 内置函数 在python的3.6.2

python基础----内置函数

一 内置函数 这里全是用print打印来查看输出结果 1)abs() 绝对值 1 print(abs(-1)) #1 2 print(abs(0)) #0 3 a = abs(True) 4 print(a) #1 5 print(abs(False)) #0 2)all() 可迭代对象为空,返回True,有任何一个值为假,则为False 1 print(all(" ")) #True 2 print(all((1,2,3,None))) #Flase 3 print(all((1,2

Python基础----内置函数补充、匿名函数、递归函数

内置函数补充 python divmod()函数:把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b) 语法: 1 divmod(a, b) #a.b为数字,a为除数,b为被除数 示例: 1 >>> divmod(7, 2) 2 (3, 1) #3为商,1为余数 3 >>> divmod(7, 2.5) 4 (2.0, 2.0) 应用:web前端页数计算 1 total_count=73 2 per_count=23 3 res=div

python基础-内置函数(1)

python 提供了很多的内置函数. 一.数值处理相关函数: 1.取绝对值:abs() def abs(*args, **kwargs): # real signature unknown """ Return the absolute value of the argument. """ pass abs() 2.转二进制:bin() def bin(*args, **kwargs): # real signature unknown; NOT

0517Python基础-内置函数

1.昨日内容回顾 可迭代对象:内部含有__iter__方法的 迭代器:内部含有__iter__方法并且还含有__next__方法的 可迭代对象.__iter__() 判断可迭代对象,迭代器. '__iter__' in dir(可迭代对象) '__next__' in dir(可迭代对象) isinstance(obj, Iterator) isinstance(obj, Iterable) 迭代器: 节省内存. 惰性机制. 单向不可逆. 生成器: 生成器本质是迭代器,他是用python代码写的

Python基础-----内置函数(不全)

#!/usr/bin/env python# -*- coding:utf-8 -*-##########################################################################################1. abs(number)用于返回number的绝对值print(abs(-2)) ##########################################################################

python基础-内置函数(2)

一.创建集合.字典.列表.元组的函数 1.创建集合:set() s=set() #生成一个空集合 s1=set([11,22,33,44,11]) #生成一个集合 2.创建字典:dict() a = dict(one=1, two=2, three=3) b = {'one': 1, 'two': 2, 'three': 3} c = dict(zip(['one', 'two', 'three'], [1, 2, 3])) d = dict([('two', 2), ('one', 1), (

python基础---内置函数 和 匿名函数 知识点自查填空题

1.file ---默认是输出到(),如果设置为(),输出到() 2.sep---打印(),默认为() 3.end---每一次打印的结尾,默认为() 4.flush---立即把内容输出到(),不做() 5.eval()---有返回(),主要用于()简单计算 6.exec()---没有返回(),用在()控制 注:exec eval 都可以执行()类型的代码 7.bin---()进制 8.oct---()进制 9.hex---()进制 10.abs---取()值 11.divmod---(),取()