python学习笔记2 容器及访问 列表推导式

本文深入探讨Python中的序列对象,如str、list、tuple的操作方法,包括初始化、成员操作、索引与切片访问、序列拼接等。同时,介绍了列表、元组、集合和字典的高级应用,如列表推导式、集合操作和字典遍历。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

序列对象: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)
#不能改变对象本身,只能改变引用的指向
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值