序列对象:str, list, tuple
#初始化
s1='julyedu.com ' #str
l1=['julyedu','AI教育'] #list
l2=['.com','平台']
l3=[5,12,6,3,8,9]
l4=['tensorflow','sklearn','']
l5=['','','','']
t1=('julyedu',['国内领先的人工智能平台','AI']) #tuple
- 成员操作
#成员操作
print('julyedu' in t1) #返回true
print('com' not in s1)
#索引访问
t1[1][1] #返回'AI'
#切片访问
s1[0:-1:3] #返回'jyuo'
t1[0:-1] ##返回('julyedu',)
t1[0][0::2] #返回'jleu'
t1[1][0][0::2] #返回'国领的工能台'
- 其它操作
#其它操作
len(t1)
len(s1)
list(reversed(t1)) #将倒序的t1列出来
sorted(s1)
sorted(l1) #返回为['AI教育','julyedu'] 从小到大排序 原列表l1不会发生变化 l1.sort则会改变原l1
sorted(l3)
max(l3);min(l3);sum(l3)
max(l1)
- 枚举器 针对于序列
#枚举
for _,item in enumerate(l1):
print(_,item)
#0 julyeddu
#1 AI教育
- 序列拼接
#序列拼接
list(zip(l1,t1)) #一一对应连接起来 返回列表[('julyedu','jultedu'),('AI教育',['国内领先的人工智能平台','AI'])]
a=list(zip(l1,l2)) #l1 l2的长度必须一样 返回[('julyedu','.com'),('AI教育','平台')]
list(zip(*a)) #恢复 返回[('julyedu','AI教育'),('.com','平台')]
- any\all
#any判断对象是否为空对象,如果都为空、0、false,则返回false,如果不都为空、0、false,则返回true
any(l4)#l4中有空元素,但也有不为空的元素
any(l5)#l5中的元素全部为空,0或者false,any返回的就是false
#all判断对象中的所有元素不为0、''、False或者x为空对象,则返回True,否则返回False
all(l4)#l4中有一个空元素,则返回False
all(l3)#l5中的元素全部为空,0或者false,any返回的就是false
列表List []
#列表内部操作
l1=['julyedu','AI教育'] #list
l2=['.com','平台']
l3=[5,12,6,3,8,9]
l4=['tensorflow','sklearn','']
l5=['','','','']
dir([]) #可以查看列表下有什么操作
l3.append(l2)#添加到未尾,如果元素是列表,也是按照列表添加进来 返回[5,12,6,3,8,9,['.com','平台']]
l3.extend(l2)#扩展,如果是扩展元素是列表,是只添加列表内的元素 返回[5,12,6,3,8,9,'.com','平台']
l3.insert(0,'sklearn')#按索引插入元素 在0位置上 ['sklearn',5,12,6,3,8,9]
l3.index('sklearn')#获得指定元素的索引位置,如果存在相同元素,返回的是从右到左第一个的索引位置
l1.count('AI')#统计元素出现的次数
l3.pop()#返回最后一个位置的元素 并删除它 返回9
l1.pop(3)#返回指定索引位置的元素 并删除它 返回3
del l1[-1] #删除列表元素,按索引位置删除
l1.remove('AI')#指定元素进行删除,如果存在相同元素,则删除从左至右第一个元素
列表推导式(list comprehension) 利用现有列表创建新列表 比for简便
l1=list(range(300))
[x for x in l1 if x>=290] #[290,291,292,293,294,295,296,297,298,299]
#从一个列表中
[i for i in range(9) if i%2==0]
#从两个列表中进行推导
[(i,j) for i in range(5) for j in range(5)] #两个循环
元组Tuple ()
#tuple成员操作
t1=(5,6,7)
t1+4#这里会报错
t1+(4,) ##(5,6,7,4) 并没有改变t1
#通常我们在命令行输入4,5,6返回的是一个tuple
#而只输入4时,返回的是一个数值型
t1[0] #注意是方括号 返回5
#对元素中字典元素进行修改
t1=(1,'a',{'name':'AI'})
t1[-1]['name']='Julyedu.com'
t1 #(1,'a',{'name':'Julyedu.com'})
集合Set {}
一组key的无序排列组合,因此无法用索引及切片访问
主要作用:用于去重及集合间操作
l1=[1,2,3,4,1,2,5]
set(l1) #[1,2,3,4,5] 无序的
a =set('abcde')
b = set('cdefg')
a | b #并集 {'a','b','c','d','e','f','g'}
a & b #交集
a - b #差集
a.update(b)#集合a b合并 更新了a
字典Dictionary {}
Key:Value对应 字典不是序列 不是按索引访问
#初始化
d1={'name':['fan','jack'],'age':24}
d2=dict({'salary':9999,'level':5})
#新增成员
d1['address']='beijing' #{'name':'jack','age':24,'address':'beijing'}
#访问:按key访问value:
d1['name'] #['fan','jack']
d1.get('name',-1) #['fan','jack']
#访问所有key
d1.keys()
#访问所有value
d1.values()
#访问所有元素
d1.items()
#删除成员
d1.pop('address') #返回指定key的值。并弹出元素
d1.popitem() #r返回整个元素。并弹出
#清空
d1.clear()
#Key值的选取,能被hash的值都可以做为key,即不可变类型可以做为key值。
hash('a')
内存管理
#在Python中,每个对象都有存有指向该对象的引用总数,即引用计数(reference count)。
#我们可以使用sys包中的getrefcount(),来查看某个对象的引用计数。
#需要注意的是,当使用某个引用作为参数,传递给getrefcount()时,参数实际上创建了一个临时的引用。
#因此,getrefcount()所得到的结果,会比期望的多1。
from sys import getrefcount
a = [1, 2, 3]
print(getrefcount(a)) #返回2
b = a
print(getrefcount(b)) #返回3
可变与不可变对象
#可变对象
a=b=c=[1,2,3]
print(a,b,c)
a.append(4)#通过a能真正改变列表[1,2,3],
print(a,b,c)
#通过引用其元素,改变对象自身
a=[1,2,3]
b=[1,2,3]
id(a)==ia(b) #false
#不可变对象
a=b=c='beijing'
a='shanghai'
#打印a,b,c,d指向对象的id,看看是否是一个家伙
print('id(a):',id(a),'id(b):',id(b),'id(c):',id(c))
#看似是把a变量指向的字符串从beijing,改为shanghai,但其它并没有改变beijing,只是a的指向被改变了
print(a,b,c)
#不能改变对象本身,只能改变引用的指向