二分法

二分法查找适用于数据量较大时,但是数据需要先排好顺序。主要思想是:(设查找的数组区间为array[low, high])

(1)确定该区间的中间位置k

(2)将查找的值T与array[k]比较。若相等,查找成功返回此位置;否则确定新的查找区域,继续二分查找。

区域确定如下:array[k]>T 由数组的有序性可知array[k,k+1,……,high]>T;故新的区间为array[low,……,k-1];

若array[k]<T 由数组的有序性可知array[k,k-1,……,low]<T;故新的区间为array[k+1,……,high]

应用:查找一个数是否在一个有序的列表中

def search(nums, target):
mid_index = len(nums)//2
mid_num = nums[mid_index]
if not nums:
print('not exists!')
if mid_num == target:
print('find it!')
elif mid_num < target:
nums = nums[mid_index+1:]
search(nums,target)
else:
nums = nums[:mid_index]
search(nums, target) nums = [-1,0,3,5,9,12]
target = 9
search(nums,target)
find it!

匿名函数

匿名函数是用关键字lambda定义的函数

# 语法
lambda 参数: 逻辑代码
# 如返回x,y的和
func = lambda x,y:x+y
res = func(1,2)
print(res)
3

匿名函数使用一次就失效了,一般不单独使用,与max最大值/min最小值/sorted排序/map映射/filter过滤 连用

如:返回字典中工资最高的人

# max(iterable,key=func)    将func函数的返回值作为判断的依据,返回iterable中的最大值
saraly_dict = {
'nick':30000,
'egon':100000,
'tank':2000,
'alex':10212
} res = max(saraly_dict, key=lambda name:saraly_dict[name])
print(res)
egon

如:返回字典中工资最低的人

# min(iterable,key=func)    将func函数的返回值作为判断的依据,返回iterable中的最小值
saraly_dict = {
'nick':30000,
'egon':100000,
'tank':2000,
'alex':10212
} res = min(saraly_dict, key=lambda name:saraly_dict[name])
print(res)
tank

如: 将字典中按工资进行排序

# sorted(iterable,key=func)    将func函数的返回值作为判断的依据,对iterable进行从小到大排序
saraly_dict = {
'nick':30000,
'egon':100000,
'tank':2000,
'alex':10212
} res = sorted(saraly_dict, key=lambda name:saraly_dict[name])
res1 = sorted(saraly_dict, key=lambda name:saraly_dict[name], reverse=True) # 加关键字reverse=True则从大到小排序
print(res)
print(res1)
['tank', 'alex', 'nick', 'egon']
['egon', 'nick', 'alex', 'tank']

如: 将列表中的字符都加上'abc'

# map(func,iterable)    将iterable中的每个元素传入到func中执行
lis = ['a', 'b','123']
res = map(lambda x:x+'abc', lis)
print(list(res))
['aabc', 'babc', '123abc']

如: 将列表中以'ed’结尾的元素筛选出来

# filter(func,iterable)    将iterable中的每个元素传入到func中进行筛选
lis = ['sorted', 'teach', 'jumped']
res = filter(lambda x: x.endswith('ed'), lis)
print(list(res))
['sorted', 'jumped']

内置函数

1.bytes() 编码字符,将unicode编码成指定字符

print(bytes('中国',encoding='utf8'))
b'\xe4\xb8\xad\xe5\x9b\xbd'

2.chr()/ord()与ASCII码之间转换

print(chr(97))    # chr将ASCII码转换成对应字符
print(ord('a')) # ord将字符转换成对应的ASCII码
a
97

3.divmod(x,y) 取整取余

print(divmod(10,3))
(3, 1)

4.enumerate()获取索引和值

res = ['a', 'b','c']
for k,v in enumerate(res):
print(k,v)
0 a
1 b
2 c

5.eval() 去除数据外的引号,引号里面是什么数据类型就返回什么数据类型

print(eval('[1,2,3]'))
[1, 2, 3]

6.hash() 可哈希不可变,不可哈希可变

print(hash('abc'))    # 若里面是可变数据类型,则会报错
1361908011752591342

7.abs 取绝对值

print(abs(-10))
10

8.all()若全为真,返回True,否则返回False

print(all(['abc',1]))
True

9.any()只要有一个为真就为True,否则返回False

print(any([0,'ab']))
True

10.bin()/oct()/hex() 转成二进制/八进制/十六进制的形式

print(bin(17))
print(oct(17))
print(hex(17))
0b10001
0o21
0x11

11.dir()列出所有的功能

import time
print(dir(time))
['_STRUCT_TM_ITEMS', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'altzone', 'asctime', 'clock', 'ctime', 'daylight', 'get_clock_info', 'gmtime', 'localtime', 'mktime', 'monotonic', 'perf_counter', 'process_time', 'sleep', 'strftime', 'strptime', 'struct_time', 'time', 'timezone', 'tzname']

12.frozenset()不可变集合

print(frozenset([1,3,2]))
frozenset({1, 2, 3})

13.globals()/locals() 查看全局变量/局部变量

14.pow(x,y,z)

print(pow(3,2,4))    # 返回 x**y%z
1

15.round() 四舍五入

print(round(3.4))
3

16.sum()求和

print(sum([1,2,3]))
6

17._import_() 通过字符串导入模块

m = __import__('time')
print(m.time()) # 就是导入了time模块,m.time()就是运行time.time()
1559730202.8626022

面向过程编程

按照一定的顺序,顺序中的每一步都可以看成函数,这个函数的输入是上一个函数的输出,这就叫面向过程编程

优点:

  • 逻辑清晰,简单明了
  • 每个函数可以独立的写出来

缺点:

  • 相互之间会有一定的联系,上一步中断了,下一步也就中断了
  • 有一个功能改变了,其他的功能也要改变
  • 可扩展性差

day14-二分法、匿名函数、内置函数以及面向过程编程的更多相关文章

  1. 迭代器,for循环本质,生成器,常用内置方法,面向过程编程

    一.迭代器 1.迭代:更新换代(重复)的过程,每次的迭代都必须基于上一次的结果 迭代器:迭代取值的工具 2.迭代器给你提供了一种不依赖于索引取值的方式 3.可以迭代取值的对象:字符串,列表,元组,字典 ...

  2. Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数

    Python第七天   函数  函数参数   函数里的变量   函数返回值  多类型传值     函数递归调用   匿名函数   内置函数 目录 Pycharm使用技巧(转载) Python第一天   ...

  3. python 匿名函数&内置函数

    匿名函数:为了解决那些功能很简单的需求而设计的一句话函数怎么定义匿名函数: cal = lambda x : x*x # cal是函数名,lambda是定义匿名函数的关键字 冒号前面的额x是参数即函数 ...

  4. python学习day11 函数Ⅲ (内置函数与lambda表达式)

    函数Ⅲ(内置函数&lambda表达式) 1.函数小高级 函数可以当做变量来使用: def func(): print(123) func_list = [func, func, func] # ...

  5. Python学习笔记014——迭代工具函数 内置函数enumerate()

    1 描述 enumerate() 函数用于将一个可遍历的数据对象(如列表.元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中. 2 语法 enumerate(sequ ...

  6. python 函数--内置函数

    一.内置函数 内置函数是python自带的一系列常用函数. 二.python3中内置函数     内置功能     abs() delattr() hash() memoryview() set() ...

  7. Python——day14 三目运算、推导式、递归、匿名、内置函数

    一.三目(元)运算符 定义:就是 if...else...语法糖前提:简化if...else...结构,且两个分支有且只有一条语句注:三元运算符的结果不一定要与条件直接性关系​ cmd = input ...

  8. Python入门之三元表达式\列表推导式\生成器表达式\递归匿名函数\内置函数

    本章目录: 一.三元表达式.列表推导式.生成器表达式 二.递归调用和二分法 三.匿名函数 四.内置函数 ================================================ ...

  9. python基础之递归,匿名,内置函数

    递归函数: 什么是递归函数? 函数递归调用:在调用一个函数的过程中,又直接或间接地调用了该函数本身. 递归必须要有两个明确的阶段: ①递推:一层一层递归调用下去,强调:每进入下一层问题规模减少 ②回溯 ...

  10. python基础(10)-匿名函数&内置函数

    匿名函数 例子 返回两个数的和 def add(x, y): return x + y # 等价于 add = lambda x, y: x + y 返回字典中值最大的key dic = {'a': ...

随机推荐

  1. Unix/Linux 软件安装

    Unix/Linux 软件安装 首先我们明确.在Unix like的机器上,一套软件并不唯独一个程序,而是一堆程序代码文件. 比如main.c,haha.c,sin_value.c这三个源码文件. 1 ...

  2. 【Android基础】App签名与打包

    签名的意义 1. 为了保证程序开发人员的合法 2. 防止部分人通过使用同样的Package Name(包名)来混淆替换已安装的程序 3. 保证我们每次公布的版本号的一致性(保证签名一致才干升级) 签名 ...

  3. 容器HashSet原理(学习)

    一.概述 使用HashMap存储,非线程安全: 二.实现 HashSet 底层使用 HashMap 来保存所有元素,因此 HashSet 的实现比较简单,相关 HashSet 的操作,基本上都是直接调 ...

  4. H264--2--语法及结构[5]

    名词解释 场和帧 :    视频的一场或一帧可用来产生一个编码图像.在电视中,为减少大面积闪烁现象,把一帧分成两个隔行的场. 片:             每个图象中,若干宏块被排列成片的形式.片分为 ...

  5. Linux/Android——Input系统之frameworks层InputManagerService (六)【转】

    本文转载自:http://blog.csdn.net/u013491946/article/details/72638954 版权声明:免责声明: 本人在此发文(包括但不限于汉字.拼音.拉丁字母)均为 ...

  6. 使用nginx搭建媒体点播服务器

    使用nginx搭建媒体点播服务器 最新由于兴趣,对ubuntu和安卓上的视频点播直播等应用比较感兴趣,所以在vmware的虚拟机里面搭建了一个视频点播网站,参考了fengzhanhai的文章Nginx ...

  7. odb_sqlite_demo

    #include <iostream>       #include <odb/database.hxx>   #include <odb/transaction.hxx ...

  8. bzoj4810

    http://www.lydsy.com/JudgeOnline/problem.php?id=4810 问题就在于怎么快速查询 我们先用莫队转移,但是没办法快速地查询,那么我们就用bitset这个东 ...

  9. c语言 error C4996: 'strupr': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name

    问题: 在使用visual studio 2013,进行调试执行代码时,出现如下错误: error C4996: 'strupr': The POSIX name for this item is d ...

  10. CodeForces - 7D Palindrome Degree

    最近接触了一点字符串算法,其实也就是一个简单的最大回文串算法,给定字符串s,求出最大字符串长度. 算法是这样的, 用'#'将s字符串中的每个字符分隔,比如s = "aba",分割后 ...