知识点
1、lambda 匿名函数
2、sorted()函数
3、filter()函数
4、map()映射函数
5、递归
6、二分法
1、lambda匿名函数
语法:lambda 参数: 函数体
注意:1、函数的参数可以有多个,多个参数之间用逗号隔开
2、匿名函数不管多复杂,只能写一行,其逻辑结束后直接返回数据
3、返回值和正常的函数一样,可以是任意数据类型
# 一般函数
def func(n):
return n*n
print(func(2))
# lambda函数表达式
# lambda匿名函数
# x参数
# 后面是直接返回的函数体
# 一行实现一个函数,但是不能完成复杂的函数操作
a = lambda x:x**2
print(a)
print(a(2))
4
<function <lambda> at 0x000001FE6AAAD2F0>
4
b = lambda x,y:x+y
print(b(3,5))
8
print(b.__name__)
<lambda>
2、sorted()函数,key函数返回的必须是数字,可比较对象
语法:sorted(Iterable,key=None,reverse=False)
该函数是个内置函数,返回的是一个新的列表,原本列表不变,只有新列表被排序
# list自带的sort()排序方法
lst = [3,6,2,45,23,345,12,12456,98,908]
lst.sort()
print(lst)
[2, 3, 6, 12, 23, 45, 98, 345, 908, 12456]
lst = [3,6,2,45,23,345,12,12456,98,908]
sorted(lst)
print(lst)
ll = sorted(lst)
print(ll)
[3, 6, 2, 45, 23, 345, 12, 12456, 98, 908]
[2, 3, 6, 12, 23, 45, 98, 345, 908, 12456]
# 倒序
ll = sorted(lst,reverse=True)
print(ll)
[12456, 908, 345, 98, 45, 23, 12, 6, 3, 2]
# 按照字符串长度给字符串排序
lst = ["尼古拉斯","赵四","华山派大弟子","魔教圣女"]
def func(s):
return len(s)
ll = sorted(lst,key=func) # 该函数内部把可迭代对象中的每一个元素传给func()
print(ll)
['赵四', '尼古拉斯', '魔教圣女', '华山派大弟子']
# 按照字符串中a的个数给字符串排序
lst = ["aaa尼古拉斯","aaaaaaaaaaaaaaaa赵四","aaaaa华山派大弟子","a魔教圣女"]
def func(s):
return s.count('a')
ll = sorted(lst,key=func)
print(ll)
['a魔教圣女', 'aaa尼古拉斯', 'aaaaa华山派大弟子', 'aaaaaaaaaaaaaaaa赵四']
lst = ["aaa尼古拉斯","aaaaaaaaaaaaaaaa赵四","aaaaa华山派大弟子","a魔教圣女"]
ll = sorted(lst,key=lambda x:x.count("a"))
print(ll)
['a魔教圣女', 'aaa尼古拉斯', 'aaaaa华山派大弟子', 'aaaaaaaaaaaaaaaa赵四']
lst = [{'id':11,"name":"华山大弟子"},{"id":1,'name':"赵四"},{"id":45,'name':"尼古拉斯"},{"id":66,'name':"大张伟"}]
def func(dic):
return dic["id"]
ll = sorted(lst,key=func)
print(ll)
[{'id': 1, 'name': '赵四'}, {'id': 11, 'name': '华山大弟子'}, {'id': 45, 'name': '尼古拉斯'}, {'id': 66, 'name': '大张伟'}]
3、filter()筛选函数,key函数返回的必须是true或者false
语法:filter(function,Iterable)
filter会把iterable中的元素传递给function,然后根据function返回的true或者false来判断是否保留此项数据
# 筛选奇数
def func(i):
return i%2==1
lst = [1,2,3,4,5,6,7,8,9,11,23,22,345]
ll = filter(func,lst)
print(ll)
# 判断是否是迭代器
print("__iter__" in dir(ll))
print("__next__" in dir(ll))
<filter object at 0x000001FE6ABC4908>
True
True
# 将迭代器转化为list对象,进行打印
print(list(ll))
[1, 3, 5, 7, 9, 11, 23, 345]
# 采用lambda匿名函数
lst = [1,2,3,4,5,6,7,8,9,11,23,22,345]
ll = filter(lambda x:x%2==1,lst)
print(list(ll))
[1, 3, 5, 7, 9, 11, 23, 345]
4、map()
mapreduce思想
lst = [1,2,3,4,5,6]
def func(i):
return i**2
it = map(func,lst)
print(list(it))
[1, 4, 9, 16, 25, 36]
lst = [1,2,3,4,5,6]
it = map(lambda x:x**2,lst)
print(it)
<map object at 0x000001FE6ABBE320>
5、递归
递归最大的便利是遍历树形结构
# 伪代码
def tree(root):
left = root.left()
right = root.right()
tree(left)
tree(right)
import os
# 遍历树形结构
filePath = "F:\A大数据学习"
it = os.listdir(filePath) # 查看文件夹中的文件
print("__iter__" in dir(it)) # 可迭代对象
print("__next__" in dir(it))
True
False
filePath = "F:\A大数据学习"
def read(filePath,n):
it = os.listdir(filePath)
for el in it:
if os.path.isdir(os.path.join(filePath,el)): # 判断是文件夹还是文件
#pass # 递归的入口
read(os.path.join(filePath,el),n+1)
else: # 普通文件
print("\t"*n,filePath)
print("\t"*n,el) # 递归的出口
read(filePath,0)
F:\A大数据学习
java_socket编程单线程.md
F:\A大数据学习
Java_多线程(内附示例代码,可运行).md
F:\A大数据学习
java_文件的读写.md
F:\A大数据学习\logs
events.out.tfevents.1583757856.DESKTOP-P16CDOQ
F:\A大数据学习
pandas_data_process_AM.pdf
F:\A大数据学习
Python3_send和生成器函数的使用示例.md
F:\A大数据学习
python基础_python函数名的应用.md
F:\A大数据学习
Python基础_闭包和迭代器.md
F:\A大数据学习\TensorFlow_实战学习笔记(内附详细实现代码)
TensorFlow_实战学习笔记(内附详细实现代码).md
F:\A大数据学习
下载.png
F:\A大数据学习
分组.pdf
F:\A大数据学习
基于LSTM来实现mnist手写数字识别(内附代码).md
F:\A大数据学习\手把手入门:tensorflow案例实战MNIST(内附源代码和数据集)
output_15_0.png
F:\A大数据学习\手把手入门:tensorflow案例实战MNIST(内附源代码和数据集)
output_15_1.png
F:\A大数据学习\手把手入门:tensorflow案例实战MNIST(内附源代码和数据集)
output_15_2.png
F:\A大数据学习\手把手入门:tensorflow案例实战MNIST(内附源代码和数据集)
output_15_3.png
F:\A大数据学习\手把手入门:tensorflow案例实战MNIST(内附源代码和数据集)
output_15_4.png
F:\A大数据学习\手把手入门:tensorflow案例实战MNIST(内附源代码和数据集)
output_7_0.png
F:\A大数据学习\手把手入门:tensorflow案例实战MNIST(内附源代码和数据集)
手把手入门:tensorflow案例实战MNIST(内附源代码和数据集).md
F:\A大数据学习
手把手入门:tensorflow案例实战MNIST(内附源代码和数据集) (1).zip
F:\A大数据学习
手把手入门:tensorflow案例实战MNIST(内附源代码和数据集).zip
F:\A大数据学习\电子书
Scala语言规范.pdf
6、二分查找
二分查找每次能够排除一半的数据,查找的效率非常高,但是局限性比较大,只能有序序列才可以使用二分查找
要求:查找的序列必须是有序序列
# 第一种写法 非递归
lst = [11,22,33,445,55,44,66,77,88,99,100,106,190,111111,343352435,34,2,3]
n = 190
left = 0
right = len(lst)-1
mid = (left+right)//2
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("不存在!")
存在在12位置
# 第二种写法 递归
lst = [11,22,33,445,55,44,66,77,88,99,100,106,190,111111,343352435,34,2,3]
n = 190
def binary(left,right,n):
mid = (left + right)//2
if n>lst[mid]:
left = mid + 1
elif n<lst[mid]:
right = mid-1
else:
return mid
return binary(left,right,n)
binary(0,len(lst)-1,22)
1