python_012
一.内置函数
1.sorted()排序函数
a:语法sorted(Iterable,key = None,reverse = False) Iterable:可迭代对象;key:排序规则(函数)
lst = [5,7,6,12,1,13,9,18,5]
lst.sort() # sort是list里面的一个方法
print(lst) ll = sorted(lst, reverse=True) # 内置函数. 返回给你一个新列表 新列表是被排序的
print(ll)
#输出结果:
[1, 5, 5, 6, 7, 9, 12, 13, 18]
[18, 13, 12, 9, 7, 6, 5, 5, 1]
带有key函数的排序:
lst = ["大阳哥a", "尼古拉斯aa", "赵四aaa", "刘能a", "广坤aaaaaa", "谢大脚a"] def func(s):
return s.count('a') # 返回数字 和下面lambda s:s.count('a')一样
ll = sorted(lst, key=lambda s:s.count('a')) # 内部. 把可迭代对象中的每一个元素传递给func
print(ll)
#输出结果
['大阳哥a', '刘能a', '谢大脚a', '尼古拉斯aa', '赵四aaa', '广坤aaaaaa']
2.lamda匿名函数
a:为了解决一些简单的需求而设计的一句话函数;lambda表示的是匿名函数,,不需要def来声明,一句话就可以;
语法:函数名 = lambda 参数:返回值
b:匿名函数统一都叫lambda,可以用__name__()查看函数名;
3.删选函数filter()
a:语法:filter(function,Iterable)在filter中会自动把iterable中的元素传递给function,然后根据function
返回True或者False来判断是否保留此项数据.
lst = [1,2,3,4,5,6,7,8,9]
ll = filter(lambda i:i%2==1, lst)
# 第一个参数. 函数. 将第二个参数中的每一个元素传给函数. 函数如果返回True, 留下该元素.
print("__iter__" in dir(ll)) #返回的ll是一个迭代器
print("__next__" in dir(ll))
print(list(ll))
#输出结果:
True
True
[1, 3, 5, 7, 9]
4.map()映射函数
a:语法: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))
#输出结果
[1, 4, 9, 16, 25, 36, 49, 64, 81, 0, 529, 529, 16, 2704, 1225, 54756, 54756, 54756, 54756, 54756, 529, 16]
lst1 = [ 1, 2, 3, 4, 5]
lst2 = [ 2, 4, 6, 8]
print(list(map(lambda x, y:x+y, lst1, lst2))) # 如果函数中有多个参数. 后面对应的列表要一一对应
#输出结果
[3, 6, 9, 12]
二.递归
1.在函数中调用函数本身,就是递归
2.在Python中递归最大的深度是998;
3.可以用递归来遍历各种树形结构,比如文件夹系统,可以用递归来遍历该文件夹中的所有文件;
4.递归和while循环的区别,while循环,用的是同一个变量,只不过被重新赋值,而递归则是每次都开辟一个命名空间,重新调用;
5.关于文件夹的递归:
import os
filepath = "d:\solor"
def read(filePath,n):
it = os.listdir(filePath) #查看文件中的文件,是一个可迭代对象
for line in it:
fp = os.path.join(filePath,line)
if os.path.isdir(fp): #判断文件是文件夹还是文件
print('\t'*n,line)
read(fp,n+1)
else:
print('\t'*n,line)
read(filepath,0)
#输出了文件夹列表
三.二分法三种模式
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("不存在")
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) ) 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)
python_012的更多相关文章
随机推荐
- Java ——方法
本节重点思维导图 方法的定义 例题:1!+2!+3!+4!+…..+15!=? public class Demo { public static void main(String[] args) ...
- StringBuffer 和Stringbuilder源码分析
首先看一下他们的继承关系 这个两个对象都继承了AbstractStringBuilder抽象类. 1.他们的实现方式都一样的,唯一区别的StringBuffer在多线程的时候是保证了数据安全, ...
- python+selenium的WebElement对象操作
webelement对象操作 webelement对象是selenium中所有元素的父类,也就是webelement对象拥有的方法,其它元素对象都会有: 只是不同的对象在调用特定方法时,效果是不一样的 ...
- java 注解 Annontation
什么是注解? 对于很多初次接触的开发者来说应该都有这个疑问?Annontation是Java5开始引入的新特征,中文名称叫注解.它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metada ...
- 电路维修 (广搜变形-双端队列bfs)
# 2632. 「BalticOI 2011 Day1」打开灯泡 Switch the Lamp On [题目描述] 有一种正方形的电路元件,在它的两组相对顶点中,有一组会用导线连接起来,另一组则不会 ...
- Python所有转义字符总汇
转义字符就是让程序按照已经设置好的字符输出,不然程序当成其他的输出了,下面总结所有python转义字符 \\ 反斜杠符号\' 单引号\" 双引号\a 响铃\b 退格(Backspace)\e ...
- 利用 Python 进行批量更改文件后缀
利用 Python 进行批量更改文件后缀 代码 import os files = os.listdir('.') for file_name in files: portion = os.path. ...
- Feign负载均衡
Feign是一个声明式的Web Service客户端,比Ribbon好用,默认也是轮巡.我们只需要使用Feign创建一个接口,并用注解就好了.如果你基于spring cloud发布一个接口,实际上就是 ...
- EF6 MySQL错误之“Specified key was too long; max key length is 767 bytes”
由于 MySQL Innodb 引擎表索引字段长度的限制为 767 字节,因此对于多字节字符集的大字段(或者多字段组合索引),创建索引会出现上面的错误. 以 utf8mb4 字符集 字符串类型字段为例 ...
- C#linq计算总条数并去重复的写法
一,在实际需求中我们会存在选出了一个集合,而这时我们需要通过集合的某几个字段来计算重复,和统计重复的数量,这时我们可以用到linq来筛选和去重复. 二,如下代码: using System; usin ...