python数据结构和内存管理思维导图:
对于数据结构的学习主要从这几方面入手:
- 初始化
- 常用操作(增删该查)
- 常用内置函数,注意点
有序序列主要分为字符串,列表,和元组,
一.有序序列
定义:
str1=‘python’//字符串
l1=['python','java','c',100] or l1=list(range(100)) //存放的数据类型可以不同
t1=('class','age',10,['en','cn','abc']) //元组中的元素只读,不能修改,标红部分可以修改
常用操作(增删改查-以list和tuple为主):
访问:索引和切片方式 //l1[index] or l1[start:end:step],遍历通过for x in l1方式访问元素。还可以通过下面的方式在访问元素时获得序号:
for seq,item in enumerate(l1):
print(seq,item) //seq 从0开始
增加:str不可变对象,对象内容不能改变,若要改变可以转化成list,再修改,再转为str。其他两类增加元素的方式为:
l1.append('element') //增加到最右侧
l1.insert(index,'element') //在制定的位置上插入元素element
修改:l1[index]='modifiedValue' //通过下标修改
删除:l1.pop() //弹出最右侧的元素
l1.pop(index) //制定下标弹出元素
l1.remove('element') //删除指定的元素
del l1[2]//按位置删除元素
常用内置函数,注意点:
列表推导式:python的一个很有用的功能,格式如下:
[x for x in 列表 if 条件] or
[(x,y) for x in 列表 for y in 列表]
例如,求1~100直接可以被3整除的数有哪些:
result=[x for x in range(1,101) if x%3==0]
print(result)
zip:拼接列表,如:
zip(l1,l2),解包使用zip(*l1)
常用内置函数:
长度:len(l1)
成员判断:in/not in
获取元素下标:l1.index('xxx')
统计元素出现的个数:l1.count('xxx')
列表比较:l1>l2,是按元素逐个比较的
排序:sorted(l1)//不改变列表本身顺序,返回的是一个对象 l1.sort()//改变列表本身顺序
反转:reversed(l1)//不改变列表本身,返回的是一个对象 l1.reverse()//改变列表本身
拼接:l1.extend(l2) or l1+l2
聚合函数:max,min,sum等等
空值判断:any和all--不常用
类型转换:list(),str(),tuple()
若一个列表如下:
l1=['a','b','c']可通过 e1,e2,e3=l1获得里面对应的元素。
二.无序容器
set存放的是不重复的元素。
初始化:s1=set(l1)
增加:add(‘’),
删除:remove(‘’)
集合之间的操作:交集&,并集|,差集-
关于字典的操作:
d1={'name':'zs','age':20}
#成员判断(针对 key)
'name' in d1
'address' in d1
#新增成员
d1['address']='beijing'
#访问:按key访问value:
d1['name']
d1.get('name',-1)
#访问所有key
d1.keys()
#访问所有value
d1.values()
#访问所有元素
d1.items()
#删除成员
d1.pop('address')#返回指定key的值。并弹出元素
d1.popitem()#r返回整个元素。并弹出
#清空
d1.clear()
三.可变与不可变对象
数值和字符串都是不可变对象,列表和字典均是可变对象:
可变和不可变指的是对象的内容可否被改变。图示如下:
通过上图,很容易理解可变和不可变的含义,也就理解了为什么元组中的元素为列表时可以修改的原因。