python的容器:
什么是容器:容器就是编程语言提供给我们开发者使用的对象(包含性质)
为什么学习容器:大量数据的时候,批量的管理和操作大量数据
什么时候用:大量数据,特殊数据
在程序中数组,链表,栈,队列,其中数组查询非常快
怎么用:
python官方为大家提供四种常见容器
list(列表):
有序的数列
在程序中,线性表:数组,链表,栈,队列
python的list底层就是基于双向链表结构设计的
[] #列表是以[]的形势表现
ls=[] #空列表
ls=[1,2,3,4,5,6] #创建了一个有如下元素的列表
ls=list([1,2,3,4,5,6,7])
help(list)#全局函数help可以查阅模块信息
len():全局函数,返回长度
全局函数:不需要导入包 print(),input(),type(),range(),list(),len(),exit(),help(),dir()
访问list中的元素
线性表,都是具有下标(索引)的
列表对象[下标]
注意:下标从0开始,注意越界问题
list常见方法:
append #在列表尾部追加元素
insert(index,元素)#在对应的索引位插入元素
remove(元素)#移除元素,如果不存在,则报错
pop(index=-1)#默认移除最后一个元素,如果存在参数,则该参数就是要移除的下标,注意:下标有误,会抛出异常
reverse()#翻转列表顺序
sort()#排序
clear()#清空列表
index(元素)#查找元素位置
count(元素)#统计某元素数量
extend()#合并列表
copy()#拷贝对象,其本质为前拷贝
set(集合):特点:无序的(不存在下标),不重复的
底层使用的hash表(哈希表)
定义:
1,借助弱数据类型语言的特点
{xx}
注意:必须要存在值,否则默认空{}是字典类型,而不是set
2,全局set函数
s=set({})
遍历只能使用for循环遍历,while没有办法遍历
add#添加元素
clear()#清除列表
copy()#浅拷贝
difference()#差集
intersection#交集
union#并集
remove(元素)#移除元素,如果不存在,则报错
pop(元素)#随机移除,不存在报错
discard(元素) #随机移除,不存在不报错
tuple(元组):
不可变数据类型,就是说它里面的元素不允许被修改
定义:(), t=tuple(("xx"))
count() #统计元素个数
index()#查看元素索引位置
注意:t=(1)不代表元组代表int
t=(1,)代表元组
dict(字典):
定义:
d={}
d={k1:v1,k2:v2}
d=dict({....})
可以使用key访问到key对应的值
d["k1"]
d.get("k2")
d.get("k2","erro")#当字典中无k2值默认输出erro
p["name"]="lisi" #增加键值对,如果字典中有这一个key则覆盖
clear
copy
get
keys #将所有的key返回
values#将所有的值返回
setdefault
items#一对一对的返回
pop (key) #通过key删除键值对
popitem()#安装LIFO(last-in,first-out)order删除键值对
字典的遍历:
for key in p :
print(key , p[key])
==
for key in p.keys() :
print(key,p.get(key))
==
for key , value in p.items() :
print(key,value)
==
for t in p.items() :
print(t[0],t[1])
查看全局函数:dir(builtins)
排序:将无序的数据想办法排列成有序的数据
冒泡排序:
升序:
降序:
, 选择排序:每次查找的时候,查找到最小的值,跟第一个交换
,插入排序:
查找方法:
二分查找(折半查找):
1,找到中间数
2,不停比对直至找到正确的值
查找:特指从有序的数据中查找需要数据的位置
函数:
1,什么是函数(what)
C语言是一门面向过程的语言
函数就是行为,动作,功能,过程
2,python如何定义函数
关键字def (defined function)
函数名称的命名规范就是变量的命名规范
def 函数名称(【参数列表】):
#函数体
#【return 返回值】#放在中括号中代表可有可无
3,函数的分类:
以有没有返回值,有没参数
函数遇到return关键字,则立刻返回
参数个数,根据情况任意,参数类型,是任意类型
函数定义者:
系统函数:
由官方定义的函数:
print,input,type。。
第三方定义:
需要安装这些模块,才能使用
pip,install 模块名称
pip(python install package)
自定义函数
我们写的函数
注意:(函数,变量...)命名时一定要注意,和系统的全局函数不要冲突
4,全局变量和局部变量(本地变量);
全局变量:直接定义在py(模块)文件中的变量 注意:全局变量在函数可以直接访问,但是在python中不允许被修改,如果一定要修改需要提前声明这个函数需要修改某个全局变量,在函数的第一行,global关键字声明需要修改全局变量
列表是一个对象,它存在与堆中所以在函数中可以被改变
eg:global age #打第一行
局部变量:定义在函数内部的变量,只能在函数内部访问
5,函数的调用过程--压栈(内存模型)
函数本质就是一个对象,一般在堆中
压栈(push):将函数从堆内存中放到栈中执行
弹栈(pop):函数执行完成后出栈内存
代码本质都是在内存中运行的
内存中栈是比较小的,堆是非常大的占内存的百分之九十空间
栈stack的特点:先进后出,后进先出
堆heap的特点:
6,引用传递和值的传递
引用:传递的本质是地址,是对象,是引用
值传递:本质就是值
函数本质就是一个对象,参数的类型,是任意类型
7,函数参数(默认参数,命名参数,可变参数,万能参数)
默认值:def area(r ,pi=3.14)#注意默认值参数一定要写在普通参数之后
可变参数:def text(x,y,*args): #args代表元组元素所以可以添加多个参数,而且输出按照元组输出
print(x)
print(x)
print(args)#结果(3,4,5)
text(1,2,3,4,5)
关键字(命名)参数:
def test02(a,b,**kwargs):#为字典
print(a,b)
print(kwargs)
text02(10,20,name="ljh",age=16)
#上面参数可组合不过要有顺序一般为 默认 可变 关键字
8,函数递归
什么是递归:
有两个条件:
1,函数自身调用自身
2,一定要有终止条件,否则就是一个死循环
注意:在python中,不允许递归超过1000次,不过想超过1000次也可以,需要导入sys模块
sys.setrecursionlimit(10000)#重新设置递归限制次数
sys.getrecursionlimi()#获取递归限制次数
递归的本质是以空间换时间
9,匿名函数--lambda表达式
在早期python,是没办法实现匿名的原因python是一个严格的缩进的语言
优点:简化操作,语法简洁。缺点:代码的可读性降低了,维护成本升高了
最佳实践:如果函数参数是一个函数,这个函数比较简单,则可以使用lambda,否则不太建议
10,偏函数
是一种语句的写法
偏函数:python为了能够简化函数调用,如果在调用时某个或者某几个参数,一直都是固定的,那么就可以使用偏函数实现参数固定.
int()一般我们使用的是一个参数,但是他有默认参数
int(x,base=10)#如果不对base定值,默认按十进制转化参数
import functools
返回一个新的函数=functools.partial(需要转化的函数,需要固化的参数)
也可以这样导入模块
from functools import partial
aa=partial(int,base)
11,全局函数
全局函数,就是python官方提供给我们使用,不需要导入模块,python3提供的所有全局函数
eval:将字符串转化为代码执行,如果输入数值要以逗号分隔
12,字符串对象
字符串在python中就是一个基本数据类型
在python就是一个对象
构建一个字符串
'' , "" , """ """, ''' '''
str(字符串)#创建或者转换字符串
字符串其本质就是一种常量,他底层存储在常量缓冲区
因此也是一种不可变数据类型,另外元组和数字也是不可变
因此python提供了字符串对象的概念,我们可以字符串对象的常见方法来操作字符串
字符串的常见方法
capitalize()#首字母大写
center()#两个参数,第一个表示整体长度,字符串在中间,第二个如果有,表示填充空白,空白填充为参数的字符
ljust()#左对齐
rjust()#右对齐
count()#统计字符串中出现的符号的次数
startswith()#以什么开始,是就是true,不是false
endswith()#以什么结束,是就是true,不是false
find()#查询某种符号第一次出现位置,没有返回-1
index()#查询某种符号第一次出现位置,没有返回则抛出异常
rfind()#查询某种符号最后一次出现位置,没有返回-1
rindex()#查询某种符号最后一次出现位置,没有返回则抛出异常
join()#按照特定的符号连接元素,组成字符串
split()#将字符串按照特定符号分隔成列表
13,切片:
有序序列(列表,元组,字符串)#切割,截取等操作
#有序序列可以使用遍历
eg:for i in stttt :
prin(i) #结果为字符串每一个字符输出