小学生都能学会的python(<lamda匿名函数,sorted(),filter(),map(),递归函数>)
小学生都能学会的python(<<lamda匿名函数,sorted(),filter(),map(),递归函数,二分法>>
1. lambda 匿名函数
lambda 参数: 返回值
注意:
1. 函数的参数可以有多个. 多个参数之间⽤逗号隔开
2. 匿名函数不管多复杂. 只能写⼀⾏, 且逻辑结束后直接返回数据
3. 返回值和正常的函数⼀样, 可以是任意数据类型
# def fang(x):
# return x**2
#
# # ret = fang(5)
# # print(ret)
#
# zrf = lambda x : x**2 # 匿名函数 lambda 参数: 返回值
#
# ret = zrf(10)
# print(ret)
#
# # 给函数传递两个参数a. b 返回a+b的结果
# a = lambda a, b: a+b
# print(a(188,35006))
2. sorted 排序
sorted(iterable, key=func, reverse=True/False)
执行流程:
把可迭代对象中的每一个元素拿出来, 放到func中运行. 返回一个数字. 根据数字进行排序
#
# lst = [1, 8, 18, 19, 97, 12, 3]
# # lst.sort() # lst自带的排序功能
# l2 = sorted(lst) # 排序功能
# print(l2)
# 0 2 2 2 0 2 2 2
lst = ["赵瑞鑫", "刘伟", "刘能", "赵四", "王大拿", "于谦", "范伟", "沈腾"] # def func(name):
# return len(name) % 3 # 返回数字 l2 = sorted(lst, key=lambda name: len(name) % 3)
print(l2) lst = [{"id": 1, "name": 'alex', "age": 18},
{"id": 2, "name": 'wusir', "age": 16},
{"id": 3, "name": 'taibai', "age": 17}]
# 按照年龄对学⽣信息进⾏排序
# def func(dic):
# return dic['age']
# l2 = sorted(lst, key=func) # 流程: 把可迭代对象的每一项传递给函数. 函数返回一个数字. 根据这个数字完成排序
# print(l2)
# l3 = sorted(lst, key=lambda dic: dic['age'])
# l4 = sorted(lst, key=lambda dic: len(dic['name']))
# l4 = sorted(lst, key=lambda dic: ascii(dic['name'][0])) # ord()
# print(l4)
3. filter 筛选
filter(func, Iterable)
执行流程:
把可迭代对象中的每一个元素拿出来, 放到func中运行.返回True/False. 根据返回的True和False来决定这个数据是否保留
# lst = [23, 28, 15, 27, 24, 22]
# def func(age):
# return age > 18 and age % 2 == 0
#
# f = filter(lambda age: age > 18 and age % 2 == 0, lst)
# # print(sorted(f))
# # f = filter(func, lst)
# # print(f)
# # print("__iter__" in dir(f))
#
# for el in f:
# print(el) # lst = [23, 28, 15, 27, 24, 22]
# f = filter(lambda age: age % 2 == 0, filter(lambda age: age > 18, lst))
# print(list(f)) # lst = [{"id":1, "name":'alex', "age":18},
# {"id":2, "name":'wusir', "age":16},
# {"id":3, "name":'taibai', "age":17}]
#
# # 筛选出年龄大于等于17岁的人
# print(list(sorted(filter(lambda dic: dic['age'] >= 17, lst), key=lambda dic: dic['age'])))
4. map 映射
map(func, Iterable)
执行流程:
把可迭代对象中的每一个元素拿出来, 放到func中运行.返回数据就是结果
# lst = [1,5,9,3]
# # l1 = [i**2 for i in lst]
# m = map(lambda x: x**2, lst)
# print(list(m)) # 计算两个列表相同位置的数据的和
# lst1 = [1, 2, 3, 4, 5]
# lst2 = [2, 4, 6, 8, 10]
#
# print(list(map(lambda x, y: x + y , lst1, lst2)))
5. 递归(难点)
自己调用自己
递归的入口
递归的出口: return
递归的循环条件:动
循环树形结构:
# # 递归
# def func():
# print("我叫李嘉诚")
# func() # 递归的入口
#
# # 调用函数
# func() # 用递归实现1-100
# import sys
# sys.setrecursionlimit(5000) # 设置递归的最大深度, 一般不要改.
#
# def func(index):
# print(index)
# func(index + 1)
#
# func(1) # 递归的深度: 1000 但是到不了1000, 997 - 998 # 遍历某文件夹内的所有文件和文件夹 import os
# 树形结构的遍历
def func(file_path, ceng):
# 获取到路径下的所有文件
lst = os.listdir(file_path) # 得到文件夹里的所有文件和文件夹
for file in lst: # 文件名
# 获取到文件的全路径
full_path = os.path.join(file_path, file) # D:\python学院\s16\第一阶段\day01 认识python 变量 数据类型 条件if语句
if os.path.isdir(full_path): # 判断这个路径是否是一个文件夹
print("\t"*ceng, file)
func(full_path, ceng+1)
else:
print("\t"*ceng, file)
else:
return
func("D:\python学院\s16\第一阶段", 0)
6. 二分法查找
核心思想: 掐头结尾取中间.
前提条件: 有序.
# 二分法查找的效率特别高.
# 缺点: 有序序列
#
# lst = [1,8,16,32,55,78,89,1,5,4,7,5,9,6,8,5,4,5,44,5,2,1,4,5,1]
# # [1, 1, 1, 1, 2, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 7, 8, 8, 9, 16, 32, 44, 55, 78, 89]
# lst = sorted(lst)
# n = int(input("请输入一个数:"))
# left = 0
# right = len(lst) - 1
#
# while left <= right: #
#
# mid = (left + right) // 2 # 索引只能是整数
# if n > lst[mid]:
# left = mid + 1
# elif n < lst[mid]:
# right = mid - 1
# else:
# print("在这个列表中.所在的位置%s" % mid)
# break
# else:
# print("你要找的数. 不在这个序列中") # 递归的第一套方案
# def func(n, lst):
# left = 0
# right = len(lst) - 1
# if left <= right:
# mid = (left + right)//2
# if n > lst[mid]:
# new_lst = lst[mid+1:]
# return func(n, new_lst)
# elif n < lst[mid]:
# new_lst = lst[:mid]
# return func(n, new_lst)
# else:
# print("刚刚好, 在这里出现了")
# return True
# else:
# return False
#
# lst = [1, 1, 1, 1, 2, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 7, 8, 8, 9, 16, 32, 44, 55, 78, 89]
# ret = func(2, lst)
# print(ret) # 第二套方案
def func(n, lst, left=0, right=None):
if right == None:
right = len(lst) - 1
if left <= right:
mid = (left + right) // 2
if n > lst[mid]:
left = mid + 1
elif n < lst[mid]:
right = mid - 1
else:
return True
return func(n, lst, left, right)
else:
return False lst = [1, 1, 1, 1, 2, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 7, 8, 8, 9, 16, 32, 44, 55, 78, 89]
ret = func(98, lst)
print(ret)
小学生都能学会的python(<lamda匿名函数,sorted(),filter(),map(),递归函数>)的更多相关文章
- lambda匿名函数,sorted(),filter(),map(),递归函数
1.lambda匿名函数 为了解决一些简单的需求而设计的一句话函数 #计算n的n次方 def func(n): return n**n print(func(10)) f = lambda n: n* ...
- 匿名函数 sorted() filter() map() 递归函数
一. lambda() 匿名函数 说白了,从字面理解匿名函数就是看不见的函数,那么他的看不见表现在哪里呢? 其实就是在查询的时候他们的类型都是lambda的类型所以叫匿名,只要是用匿名函数写的大家 ...
- Python_Mix*匿名函数,sorted,filter,map,递归函数,二分法查找
lambda匿名函数(函数名统一都叫lambda) 为了解决简单的需求而设计的一句话函数 语法: lambda 参数 返回值 n = lambda a,b: max(a,b) ret = n(9,4) ...
- Python之匿名函数(filter,map,reduce)
参考博客:Python匿名函数详解--http://blog.csdn.net/csdnstudent/article/details/40112803 Python内建函数之——filter,map ...
- 小学生都能学会的python(闭包和迭代器)
小学生都能学会的python(闭包和迭代器) 1. 函数名第一类对象 函数名其实就是变量名 1). 可以像变量一样互相赋值. 2). 可以作为函数的参数,进行传递 3). 可以作为返回值返回 4). ...
- 小学生都能学会的python(函数的进阶)
小学生都能学会的python(函数的进阶) 1. 动态传参 形参: 1. 位置参数 2. 默认值参数 3. 动态传参 *args 动态接收位置参数 **kwargs 动态接收关键字参数 def fun ...
- 小学生都能学会的python(函数)
小学生都能学会的python(函数) 神马是函数 函数: 对功能或者动作的封装 函数的定义 def 函数名(形参列表): 函数体(return) ret = 函数名(实参列表) 函数的返回值 retu ...
- 小学生都能学会的python(文件操作)
小学生都能学会的python(文件操作) 1. open("文件路径", mode="模式", encoding="编码") 文件的路径: ...
- 小学生都能学会的python(深浅拷贝)
小学生都能学会的python(深浅拷贝) join() 把列表中的每一项用字符串拼接起来 # lst = ["汪峰", "吴君如", "李嘉欣&quo ...
随机推荐
- VUEX 总结
What is Vuex? vuex是一个专为Vue.js应用程序开发的状态管理模式.他采用集中式储存管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变换 VUEX并不限制你的代 ...
- 【Codeforces Round #505 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Final) C】
[链接] 我是链接,点我呀:) [题意] 给你一个字符串s. 让你在其中的某一些位置进行操作.. 把[1..i]和[i+1..n]翻转. 使得里面01交替出现的那种子串的长度最长. [题解] 可以用a ...
- PHP学习总结(2)——PHP入门篇之PHP代码标识
认识PHP代码标识 想在页面中编写PHP代码非常容易,如下面代码: <?php echo "想学习php吗?来慕课网吧";?> 就像你可以编写JavaScript脚本 ...
- [置顶]
大数据架构hadoop
摘要:Admaster数据挖掘总监 随着互联网.移动互联网和物联网的发展,谁也无法否认,我们已经切实地迎来了一个海量数据的时代,数据调查公司IDC预计2011年的数据总量将达到1.8万亿GB,对这些海 ...
- Tensorflow MNIST 数据集测试代码入门
本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50614444 测试代码已上传至GitH ...
- Vijos——T 1016 北京2008的挂钟 || 洛谷—— P1213 时钟
https://www.luogu.org/problem/show?pid=1213 题目描述 考虑将如此安排在一个 3 x 3 行列中的九个时钟: 目标要找一个最小的移动顺序将所有的指针指向12点 ...
- 使用fatjar来实现将包括第三方jar包的项目到处成一个jar包供其它程序使用
一.在线安装fat jar 在线安装步骤: eclipse菜单条 help >software updates >Search for new features to install> ...
- Android4.0设置界面改动总结(二)
今年1月份的时候.有和大家分享给予Android4.0+系统设置的改动:Android4.0设置界面改动总结 时隔半年.回头看看那个时候的改动.事实上是有非常多问题的,比方说: ①.圆角Item会影响 ...
- Ambari-单步创建cluster
Ambari-单步创建 总体介绍 单步创建集群即对于集群内每个服务的安装.开启.组成服务的每个组件host信息的设置等操作都进行一次ambari-server的restAPI的调用. 这样做提高了对集 ...
- BAT常问问题总结以及回答(问题汇总篇)
几个大厂的面试题目目录: java基础(40题)https://www.cnblogs.com/television/p/9397968.html 多线程(51题) 设计模式(8点) JVM(12题) ...