python_day_15

一.今日主要内容
1. lambda 匿名函数
  语法:
  lambda 参数:返回值
  不能完成复杂的操作

2. sorted() 函数
排序.
  1. 可迭代对象
  2. key=函数. 排序规则
  3. reverse. 是否倒序
3. filter() 函数
过滤
  1. 函数, 返回True或False
  2. 可迭代对象

4. map() 映射函数
  1. 函数
  2. 可迭代对象
  5. 递归
自己调用自己.
def func():
func()
func()
难点:不好想.需要找规律. 不好读

6. 二分法
掐头结尾取中间. 不停的改变左和右. 间接改变中间. 查询效率非常高

14. 前⽅⾼能-内置函数⼆

本节主要内容:

  • 1. lamda匿名函数
  • 2. sorted()
  • 3. filter()
  • 4. map()
  • 5. 递归函数

⼀. lamda匿名函数 为了解决⼀些简单的需求⽽设计的⼀句话函数

def func(n):
return n * n print(func(3))
a = func
a(3)
print(a.__name__) # 查看函数的函数名
# lambda 匿名函数
# x 参数
# : 后面是函数体(直接return的内容)
a = lambda x: x*x # 一行搞定一个函数. 但是, 不能完成复杂的函数操作
print(a)
print(a(6))
print(a.__name__) b = lambda x, y: x+y
print(b(1,3))
print(b.__name__) # 语法: 变量 = lambda 参数: 返回值

注意:

  • 1. 函数的参数可以有多个. 多个参数之间⽤逗号隔开
  • 2. 匿名函数不管多复杂. 只能写⼀⾏, 且逻辑结束后直接返回数据
  • 3. 返回值和正常的函数⼀样, 可以是任意数据类型

匿名函数并不是说⼀定没有名字. 这⾥前⾯的变量就是⼀个函数名. 说他是匿名原因是我们通 过__name__查看的时候是没有名字的. 统⼀都叫lambda. 在调⽤的时候没有什么特别之处. 像正常的函数调⽤即可

⼆. sorted() 排序函数.

语法: sorted(Iterable, key=None, reverse=False)

Iterable: 可迭代对象 key: 排序规则(排序函数), 在sorted内部会将可迭代对象中的每⼀个元素传递给这个函 数的参数. 根据函数运算的结果进⾏排序

reverse: 是否是倒叙. True: 倒叙, False: 正序

lst = ["大阳哥a", "尼古拉斯aa", "赵四aaa", "刘能a", "广坤aaaaaa", "谢大脚a"]

def func(s):
return s.count('a') # 返回数字 ll = sorted(lst, key=lambda s:s.count('a')) # 内部. 把可迭代对象中的每一个元素传递给func
print(ll)

三. filter() 筛选函数

语法: filter(function. Iterable)

function: ⽤来筛选的函数. 在filter中会⾃动的把iterable中的元素传递给function. 然后 根据function返回的True或者False来判断是否保留此项数据

Iterable: 可迭代对象

lst = [1,2,3,4,5,6,7,8,9]

ll = filter(lambda i:i%2==1, lst)
# 第一个参数. 函数. 将第二个参数中的每一个元素传给函数. 函数如果返回True, 留下该元素.

四. map() 映射函数

语法: map(function, iterable)

可以对可迭代对象中的每⼀个元素进⾏映射. 分别取执⾏ function 计算列表中每个元素的平⽅ ,返回新列表

lst = [1,2,3,4,5,6,7,8,9,0,23,23,4,52,35,234,234,234,234,234,23,4]
it = map(lambda i: i * i, lst) # 把可迭代对象中的每一个元素传递给前面的函数进行处理. 处理的结果会返回成迭代器
print(list(it))

五. 递归 在函数中调⽤函数本⾝. 就是递归,在python中递归的深度最⼤到997.

import sys
sys.setrecursionlimit(10000) # 可以调整递归深度. 但是不一定能跑到这里
def func(count):
print("我是谁,我在哪里"+str(count))
func(count+1)
func(1) while 1:
a = 10
print("哈哈")

递归的应⽤: 我们可以使⽤递归来遍历各种树形结构, 比如我们的⽂件夹系统. 可以使⽤递归来遍历该 ⽂件夹中的所有⽂件

# 遍历树形结构
import os
filePath = "d:\sylar\python_workspace" def read(filePath, n):
it = os.listdir(filePath) # 打开文件夹
for el in it:
# 拿到路径
fp = os.path.join(filePath, el) # 获取到绝对路径
if os.path.isdir(fp): # 判断是否是文件夹
print("\t"*n,el)
read(fp, n+1) # 又是文件夹. 继续读取内部的内容 递归入口
else:
print("\t"*n,el) # 递归出口 read(filePath, 0)

六. ⼆分查找

⼆分查找. 每次能够排除掉⼀半的数据. 查找的效率非常⾼. 但是局限性比较⼤. 必须是有 序序列才可以使⽤⼆分查找 要求: 查找的序列必须是有序序列.

1)二分法,非递归版

lst = [11,22,33,44,55,66,77,88,99,123,234,345,456,567,678,789,1111]
n = 567
left = 0
right = len(lst) - 1
count = 1
while left <= right:
middle = (left + right) // 2
if n > lst[middle]:
left = middle + 1
elif n < lst[middle]:
right = middle - 1
else:
print(count)
print("存在")
print(middle)
break
count = count + 1
else:
print("不存在")

2)普通递归版

lst = [11,22,33,44,55,66,77,88,99,123,234,345,456,567,678,789,1111]

def binary_search(left, right, n):
middle = (left + right)//2
if left > right:
return -1
if n > lst[middle]:
left = middle + 1
elif n < lst[middle]:
right = middle - 1
else:
return middle
return binary_search(left, right, n)
print(binary_search(0, len(lst)-1, 65) )

3)另类二分法,很难计算位置.

lst = [11,22,33,44,55,66,77,88,99,123,234,345,456,567,678,789,1111]

def binary_search(lst, n):
left = 0
right = len(lst) - 1
middle = (left + right) // 2
if right <= 0:
print("没找到")
return
if n > lst[middle]:
lst = lst[middle+1:]
elif n < lst[middle]:
lst = lst[:middle]
else:
print("找到了")
return
binary_search(lst, n)
binary_search(lst, 65)

参考:

https://www.processon.com/view/link/5b71818ce4b0555b39e10414


作业:

4,用map来处理字符串列表,把列表中所有人都变成sb,比方alex_sb
name = ['oldboy','alex','wusir']
a = map(lambda i:i+"_sb",name)
print(list(a))
5,用map来处理下述l,然后用list得到一个新的列表,列表中每个人的名字都是sb结尾
l=[{'name':'alex'},{'name':'y'}]
a = map(lambda dic:dic['name'] + 'sb',l)
print(list(a))
6,用filter来处理,得到股票价格大于20的股票名字
shares={
'IBM':36.6,
'Lenovo':23.2,
'oldboy':21.2,
'ocean':10.2,
} a = filter(lambda i:shares[i]>20,shares)
print(list(a))
7,有下面字典,得到购买每只股票的总价格,并放在一个迭代器中。
结果:list一下[9110.0, 27161.0,......]
portfolio=[{'name':'IBM','shares':100,'price':91.1},
{'name':'AAPL','shares':50,'price':543.22},
{'name':'FB','shares':200,'price':21.09},
{'name':'HPQ','shares':35,'price':31.75},
{'name':'YHOO','shares':45,'price':16.35},
{'name':'ACME','shares':75,'price':115.65}
] a = map(lambda i:i['shares']*i["price"],portfolio)
print(list(a))
8,还是上面的字典,用filter过滤出单价大于100的股票.
portfolio=[{'name':'IBM','shares':100,'price':91.1},
{'name':'AAPL','shares':50,'price':543.22},
{'name':'FB','shares':200,'price':21.09},
{'name':'HPQ','shares':35,'price':31.75},
{'name':'YHOO','shares':45,'price':16.35},
{'name':'ACME','shares':75,'price':115.65}
] a = filter(lambda i:i['price']>100,portfolio)
print(list(a))
9,有下列三种数据类型,
l1 = [1,2,3,4,5,6]
l2 = ['oldboy','alex','wusir','太白','日天']
tu = ('**','***','****','*******')
写代码,最终得到的是(每个元祖第一个元素>2,第三个*至少是4个。)
[(3, 'wusir', '****'), (4, '太白', '*******')]这样的数据。
l1 = [1,2,3,4,5,6]
l2 = ['oldboy','alex','wusir','太白','日天']
tu = ('**','***','****','*******') a = list(filter(lambda a:a[0]>2 and len(a[2])>=4,zip(l1,l2,tu)))
print(a)
10,有如下数据类型:
l1 = [ {'sales_volumn': 0},
{'sales_volumn': 108},
{'sales_volumn': 337},
{'sales_volumn': 475},
{'sales_volumn': 396},
{'sales_volumn': 172},
{'sales_volumn': 9},
{'sales_volumn': 58},
{'sales_volumn': 272},
{'sales_volumn': 456},
{'sales_volumn': 440},
{'sales_volumn': 239}]
将l1按照列表中的每个字典的values大小进行排序,形成一个新的列表。
l1 = [ {'sales_volumn': 0},
{'sales_volumn': 108},
{'sales_volumn': 337},
{'sales_volumn': 475},
{'sales_volumn': 396},
{'sales_volumn': 172},
{'sales_volumn': 9},
{'sales_volumn': 58},
{'sales_volumn': 272},
{'sales_volumn': 456},
{'sales_volumn': 440},
{'sales_volumn': 239}] a = sorted(l1,key=lambda dic:dic['sales_volumn'])
print(a)

2018-07-20  15:26:04

python全栈开发-前方高能-内置函数2的更多相关文章

  1. python全栈开发-Day13 内置函数

    一.内置函数 注意:内置函数id()可以返回一个对象的身份,返回值为整数. 这个整数通常对应与该对象在内存中的位置,但这与python的具体实现有关,不应该作为对身份的定义,即不够精准,最精准的还是以 ...

  2. python-全栈开发-前方高能-内置函数

    python_day_14 13. 前方高能-内置函数 ⼀. 本节主要内容: 1. 内置函数 什么是内置函数? 就是python给你提供的. 拿来直接⽤的函数, 比如print., input等等. ...

  3. python全栈开发-前方高能-函数进阶

    python_day_10 一.今日主要内容 1. 动态参数 位置参数的动态参数: *args 关键字参数的动态参数 : **kwargs 顺序: 位置,*args,默认值,**kwargs 在形参上 ...

  4. Python全栈之路4--内置函数--文件操作

    上节重点回顾: 判断对象是否属于某个类,例如: 列表中有个数字,但是循环列表判断长度,用len会报错;因为int不支持len,所以要先判断属于某个类,然后再进行if判断. # isinstance(对 ...

  5. 巨蟒python全栈开发-第10天 函数进阶

    一.今日主要内容总览(重点) 1.动态传参(重点) *,** *: 形参:聚合 位置参数*=>元组 关键字**=>字典 实参:打散 列表,字符串,元组=>* 字典=>** 形参 ...

  6. python全栈开发_day11_作用域,函数嵌套和闭包

    一:作用域 1)什么是作用域 作用域是规定一个变量可以作用的范围,运行和销毁的范围 2)作用域的分类 1.内置作用域built_in:随着解释器的运行而产生,解释器运行的终止而销毁. 2.全局作用域g ...

  7. python全栈开发-前方高能-函数

    python_day_9 一.今日主要内容 函数: 函数:对功能的封装 语法: def 函数名(形参): 函数体 函数名(实参) 函数名:命名规则和变量一样 函数的返回值: return, 函数执行完 ...

  8. python全栈开发-前方高能-生成器和生成器表达式

    python_day_13 今日主要内容1. 生成器和生成器函数生成器的本质就是迭代器生成器的三种创建办法: 1.通过生成器函数 2.通过生成器表达式创建生成器 3.通过数据转换 生成器函数: 函数中 ...

  9. python全栈开发学习_内容目录及链接

    python全栈开发学习_day1_计算机五大组成部分及操作系统 python全栈开发学习_day2_语言种类及变量 python全栈开发_day3_数据类型,输入输出及运算符 python全栈开发_ ...

随机推荐

  1. [Python WEB开发] 使用WSGI开发类Flask框架 (二)

    WSGI     Web服务器网关接口 WSGI主要规定了Web服务器如何与Web应用程序进行通信,以及如何将Web应用程序链接在一起来处理一个请求. wsgiref Python中的WSGI参考模块 ...

  2. selenium + python自动化测试unittest框架学习(四)python导入模块及包知识点

    在写脚本的时候,发现导入某些模块,经常报错提示导入模块失败,这里来恶补下python导入模块的知识点. 1.模块导入时文件查找顺序 在脚本中,import xxx模块时的具体步骤: (1)新建一个mo ...

  3. PAT——1025. 反转链表

    给定一个常数K以及一个单链表L,请编写程序将L中每K个结点反转.例如:给定L为1→2→3→4→5→6,K为3,则输出应该为3→2→1→6→5→4:如果K为4,则输出应该为4→3→2→1→5→6,即最后 ...

  4. 大话Linux内核中锁机制之完成量、互斥量

    大话Linux内核中锁机制之完成量.互斥量 在上一篇博文中笔者分析了关于信号量.读写信号量的使用及源码实现,接下来本篇博文将讨论有关完成量和互斥量的使用和一些经典问题. 八.完成量 下面讨论完成量的内 ...

  5. JS模拟Dictionary

    function Map() { this.keys = new Array(); this.data = new Array(); //添加键值对 this.set = function (key, ...

  6. JAVA 8 新特性 __ Optional 类

    Optional 类是一个可以作为null容器的对象,若值存在调用isPresent()就返回 true,调用get()会返回该对象. Optional是一个容器,可以保存类型T的值,或者仅仅保存nu ...

  7. JQuery 同时获取多个标签的指定内容并储存为数组

    在网页开发中经常会碰到获取同种类型的 标签 的值得问题,比如下面的两种情况. 当需要批量获取同种标签的指定值时,新人就会碰上一点小麻烦. 比如 id=problem1的demo var list1=$ ...

  8. Redis之Redis事务

    Redis事务的概念: Redis 事务的本质是一组命令的集合.事务支持一次执行多个命令,一个事务中所有命令都会被序列化.在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会 ...

  9. 将http转为https访问

    1.去阿里云购买证书 有免费一年的证书 最多20个 一个证书需要填写一个二级域名 www.xxx.com2.开启apache相应配置 #修改httpd.conf文件 LoadModule ssl_mo ...

  10. Flash的swf文件破解

    1.准备好flash文件,xxx.swf(后缀为swf),将其重构swf文件为fla源文件. 2.asv软件(5以上版本)的操作 1.点击左上角 文件 --> 打开 --> 运行已准备好的 ...