python 内置函数,匿名函数,sorted,filter,map,递归,二分法,冒泡算法 eval
############################总结#################################
1. lambda 匿名函数
语法——lambda 参数:返回值
__name__:查看函数的名字(查看到底是谁)
fn=lamdba a,b:a+b
ret=fn(1,2)
print(ret)
#结果
3
2. sorted() 排序函数
语法:sorted(iterable, key = 函数名, reverse = False)
内置函数提供的一个通用的排序方案,sortend()
key: 排序方案,sorted函数会把可迭代对象中的每一个元素拿出来交给后面的key
后面的key计算出一个数字(权重),作为当前这个元素的权重,整个函数根据权重排序
reverse=True: 默认表示为正序, reverse=False表示反转
#按照排序出
lst=['刘亦菲','张倩','张三']
print(sorted(lst))
print(sorted(lst,key=lambda a:len(a)))
======结果====
['张倩', '张三', '刘亦菲']
3. filter() 过滤函数
语法: filter(function, iterable)
li = ['sv','sdf','fdf','fdsg','ghfd']
f=filter(lambda a:a[0] != 's',li)
a=[i for i in f]
print(a)
#######筛选第一个字符 是不是s打头赛选出来
['fdf', 'fdsg', 'ghfd']
#年纪大于12的
dic=[{'name':'zhang1','shenggao':12},
{'name': 'zhang2', 'shenggao': 14},
{'name': 'zhang3', 'shenggao': 15}]
f=filter(lambda d:d['shenggao']>12,dic)
i=[i for i in f]
print(i)
############
[{'name': 'zhang2', 'shenggao': 14}, {'name': 'zhang3', 'shenggao': 15}]
4. map() 映射函数(水桶效应)
语法: map(function, iterable)
把后面的可迭代对象中的每一个元素传递给function,结果就是function的处理结果
dic=[{'name':'zhang1','shenggao':12},
{'name': 'zhang2', 'shenggao': 14},
{'name': 'zhang3', 'shenggao': 15}]
f=map(lambda d:d['shenggao']+10,dic)
i=[i for i in f]
print(i)
##########把年纪 加上10岁
[22, 24, 25]
lst=['篮球','足球','排球']
s=map(lambda a:a+'aaa',lst)
for i in s:
print(i)
###########
篮球aaa
足球aaa
排球aaa
5. 递归
函数自己调用自己
官方最大深度:1000 6. 二分法
核心:掐头去尾取中间,一次砍一半
前提条件:有序序列
可以提高效率 两种算法:常规循环,递归循环
##################################作业##########################################
# lst = ['今天星期三', "明天星期四", "马上星期 五"] # it = lst.__iter__()
# print(it.__next__())
# print(it.__next__())
# print(it.__next__()) # it = iter(lst) # it = lst.__iter__()
# print(next(it)) # it.__next__() # zip 拉链函数
lst1 = ["赵四", "刘能", "香秀"]
lst2 = ["刘晓光", "王小利"] # 水桶效应
lst3 = ["街舞", "磕巴", "哭"]
z = zip(lst1, lst2, lst3)
print("__iter__" in dir(z)) # 判断是否是可迭代对象 for el in z:
print(el)
lst = [11,5,36,1,27,58] s = sorted(lst) # 默认从小到大排序.
print(s) lst = ["胡一菲", "张伟", "关谷神奇", "曾小贤吕小布", "诺澜"]
# 按照字符串长度排序
def func(s):
return len(s) # 返回长度 # 执行流程:
# 把可迭代对象中的每一项拿出来, 作为参数传递给后面key函数.
# 函数返回数字. 根据数字进行排序
s = sorted(lst, key=func)
print(s)
print(sorted(lst, key=lambda s:len(s) ))
lst = [
{"name":"alex", "shengao":150, "tizhong":250},
{"name":"wusir", "shengao":158, "tizhong":150},
{"name":"taibai", "shengao":177, "tizhong":130},
{"name":"ritian", "shengao":165, "tizhong":130},
{"name":"nvshen", "shengao":160, "tizhong":120},
{"name":"baolang", "shengao":183, "tizhong":190}
] # 按照体重进行排序
print(sorted(lst, key=lambda dic:dic['tizhong'], reverse=True))
# # filter 过滤
# lst = ["张无忌", "张翠山", "范冰冰", "金毛狮王", "李冰冰"]
#
# # 过滤掉姓张的人
# # 把可迭代对象打开. 把内部元素一个一个的传递给前面的函数. 由这个函数决定此项是否保留
# f = filter(lambda name : not name.startswith("张"), lst)
#
# print("__iter__" in dir(f)) # 可迭代对象
# for el in f:
# print(el)
lst = [
{"name":"alex", "shengao":150, "tizhong":250},
{"name":"wusir", "shengao":158, "tizhong":150},
{"name":"taibai", "shengao":177, "tizhong":130},
{"name":"ritian", "shengao":165, "tizhong":130},
{"name":"nvshen", "shengao":160, "tizhong":120},
{"name":"baolang", "shengao":183, "tizhong":190}
] # 过滤掉体重大于180的人 想要的是 小于180 f = filter(lambda d : d['tizhong'] <= 180, lst) print(list(f))
# map() 映射函数
lst = ["篮球球", "打打台球", "唱歌", "爬慌山", "步"] m = map(lambda s: "爱好:"+s , lst) print(list(m)) lst = [1,5,78,12,16] # 计算每个数字的平方
print([i **2 for i in lst]) m = map(lambda i: i ** 2, lst)
print(list(m))
# l=[{'name':'alex'},{'name':'y'}]
# m=map(lambda d : d['name']+'_sb',l)
# print(list(m))
# 4,用map来处理字符串列表,把列表中所有人都变成sb,比方alex_sb
# name=['oldboy','alex','wusir']
# m=map(lambda s:s+'_sb', name)
# print(list(m)) # 5,用map来处理下述l,然后用list得到一个新的列表,列表中每个人的名字都是sb结尾
# l=[{'name':'alex'},{'name':'y'}]
# m=map(lambda d : d['name']+'_sb',l)
# print(list(m)) # 6,用filter来处理,得到股票价格大于20的股票名字
# shares={
# 'IBM':36.6,
# 'Lenovo':23.2,
# 'oldboy':21.2,
# 'ocean':10.2,
# }
# ret=filter(lambda d:shares[d]>20, shares)
# print(ret)
# for i in ret:
# print(i) # 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}]
#
# m=map(lambda x:x['shares'] * x['price'],portfolio)
# print(list(m)) # 8,还是上面的字典,用filter过滤出单价大于100的股票。
# f = filter(lambda d : d['price'] > 100,portfolio)
# print(list(f)) # 9,有下列三种数据类型,
l1 = [1,2,3,4,5,6]
l2 = ['oldboy','alex','wusir','太白','日天']
tu = ('**','***','****','*******')
# 写代码,最终得到的是(每个元祖第一个元素>2,第三个*至少是4个)
# [(3, 'wusir', '****'), (4, '太白', '*******')]这样的数据。 ret=list(filter(lambda x:x[0] >2 and len(x[2])> 3,zip(l1,l2,tu)))
print(list(ret)) # 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大小进行排序,形成一个新的列表。 ret = list(sorted(l1, key = lambda x:x['sales_volumn']))
print(ret)
################################递归####################################
import os
def func(lujing,n):
lst=os.listdir(lujing)#打开文件夹,列出所有名字 b c
for el in lst: #循环当前文件夹名字 b c
path=os.path.join(lujing,el)#拼接出路径+文件夹 D:/app/zip\7-Zip
if os.path.isdir(path):#判断是不是文件夹
print('...'* n,el) #如果是文件就打印
func(path,n+1) #再来一次
else:
print("\t" * n,el)
func("D:/app/zip",0)
============================================
import os
for path,dirs,files in os.walk("D:\\python_work_s18\\djangozong\\ajax"):
for file in files:
print(os.path.join(path,file))
############################二分法#################################
lst = [1,3,5,7,12,36,68,79]
n = int(input("请输入一个数"))
left = 0 #左边界等于0
right = len(lst) - 1 #右边界
while left <= right:#小于等于right的时候才成立 不然就为假
mid = (left + right)//2
if n > lst[mid]:#如果输入的内容n比右边的大 就把左边境加mid+1 掐头结尾
left = mid + 1
elif n < lst[mid]:#如果输入的内容n比左边的小 就把右边边境mid减1 掐头结尾
right = mid - 1
else:
print("存在")
break
else:
print("不存在")
########################冒泡算法################################
# 冒泡排序, 最low的冒泡. 可以进行优化, ACM, 领扣
lst = [1 , 2, 3, 43, 2, 2, 21, 1, 12, 3] # sort()
for j in range(len(lst)): # ??? 有多少个数. 就循环多少次
for i in range(len(lst)-1): #要与i+1比较 所以要减一位
if lst[i] > lst[i+1]: #for循环 i和i+1做比较 如果前面的比后面的大就换
lst[i], lst[i+1] = lst[i+1], lst[i] # 核心思想 交换
#结果值把最大的换到了最后 所以要加个外层for 继续执行换
print(lst)
eval() 函数用来执行一个字符串表达式,并返回表达式的值。 f = open("shoppingcart.txt", mode="r", encoding="utf-8") for line in f: # {'id': 1, 'name': '大白菜', 'price': 8.8}
d = eval(line.strip()) # {'id': 1, 'name': '大白菜', 'price': 8.8}
print("商品名称:", d['name'], "商品价格", d['price'])#商品名称: 大白菜 商品价格 8.8
callable 查看是否可被调用
def func():
pass
print(callable(func)) # 可以被调用
print(callable("刘伟"))
a = 123
print(callable(a)) # 可以帮我们区分 函数和普通变量 ######结果
True
False
False
python 内置函数,匿名函数,sorted,filter,map,递归,二分法,冒泡算法 eval的更多相关文章
- 匿名函数 python内置方法(max/min/filter/map/sorted/reduce)面向过程编程
目录 函数进阶三 1. 匿名函数 1. 什么是匿名函数 2. 匿名函数的语法 3. 能和匿名函数联用的一些方法 2. python解释器内置方法 3. 异常处理 面向过程编程 函数进阶三 1. 匿名函 ...
- python之内置函数(lambda,sorted,filter,map),递归,二分法
一.lambda匿名函数 为了解决一些简单需求而设计的一句话函数,lambda表示的是匿名函数,不需要用def来声明,一句话就可以声明出一个函数. 语法: 函数名 = lambda 参数 : 返回值 ...
- lambda,sorted(),filter(),map(),递归,二分法
1. lambda 匿名函数 语法: lambda 参数:返回值 不能完成复杂的操作例 # li=['21','asdd','weqeqw','wqf']# # it=iter(li)# # prin ...
- Day14--Python--函数二,lambda,sorted,filter,map,递归,二分法
今日主要内容:1. lambda 匿名函数 lambda 参数: 返回值-------------------------------------def square(x): return x**2 ...
- python 练习题:请利用Python内置的hex()函数把一个整数转换成十六进制表示的字符串
# -*- coding: utf-8 -*- # 请利用Python内置的hex()函数把一个整数转换成十六进制表示的字符串 n1 = 255 n2 = 1000 print(hex(n1)) pr ...
- Python内置高阶函数map()
map()函数map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回. 例如,对于lis ...
- 内置函数 lambda sorted filter map 递归
一 lambda 匿名函数 为了解决一些简单的需求而设计的一句话函数 # 计算 n 的 n次方 def func(n): return n**n print(func(10)) f = lambda ...
- 匿名函数python内置高阶函数以及递归
匿名函数 python定义一个函数通常使用def关键词,后面跟函数名,然后是注释.代码块等. def func(): '''注释''' print('from func') 这样就在全局命名空间定义了 ...
- python学习日记(内置、匿名函数练习题)
用map来处理字符串列表 用map来处理字符串列表,把列表中所有水果都变成juice,比方apple_juice fruits=['apple','orange','mango','watermelo ...
随机推荐
- 云服务器ECS
云服务器Elastic Compute Service(ECS)是阿里云提供的一种基础云计算服务.使用云服务器ECS就像使用水.电.煤气等资源一样便捷.高效.您无需提前采购硬件设备,而是根据业务需要, ...
- Django+Xadmin打造在线教育系统(五)
课程相关功能实现 课程列表 创建课程相关的urls.py path("course/", include('course.urls', namespace="course ...
- 【XSY2703】置换 数学 置换 DP
题目描述 对于置换\(p\),定义\(f(p)\)为最小的正整数\(k\),使得\(p^k\)为恒等置换. 你需要求对于所有的\(n\)元素置换\(p\),\(f^2(p)\)的平均值. \(n\le ...
- Ionic3报错Error: Uncaught (in promise): Error: StaticInjectorError
ERROR Error: Uncaught (in promise): Error: StaticInjectorError[Geolocation]: StaticInjectorError[Geo ...
- django 配置邮件发送 send_email
导入 send_email 所用方法导入 from django.core.mail import send_mail 因为使用的需要指明 发送人 所以要把 setting.py 中的 EMAIL_F ...
- python学习日记(深浅copy)
赋值 #赋值,指向同一内存地址 l1 = [1,2,3,4,5] l2 = l1 print(l1,l2) print(id(l1),id(l2)) 浅copy #浅copy,第一层互相独立,创建了新 ...
- Square(斯特林反演)
题意 给出一个 \(n × m\) 大小的矩形,每个位置可以填上 \([1, c]\) 中的任意一个数,要求填好后任意两行互不等价且任意两列互不等价,两行或两列等价当且仅当对应位置完全相同,求方案数 ...
- luogu5010 HMR的LIS III (dp+线段树)
这个东西和最长上升子序列很像 考虑如果已经知道每个位置为开头的LIS长度和个数 f[i],我可以扫一遍 判断这个个数和K的大小,找到第一个长度=len而且个数<K的,这个位置就是要选的 然后K- ...
- CF285E Positions in Permutations(dp+容斥)
题意,给定n,k,求有多少排列是的 | p[i]-i |=1 的数量为k. Solution 直接dp会有很大的后效性. 所以我们考虑固定k个数字使得它们是合法的,所以我们设dp[i][j][0/1] ...
- 51Nod--1117 聪明的木匠(排序)
我们可以反过来想,如何将这几个线段组成一根 并且每次花费是组成的两段的和 #include<bits/stdc++.h> using namespace std; #define maxn ...