Python基础(二)

Python中的序列

  • 序列的概念: 有序存储,并能通过下标偏移进行访问。
  • 序列对象:str,list , tuple
  • 初始化 (列表list用[]、元组tuple用()、字符串string用"")
  • 标准操作:
    成员操作
    连接与重复 (同类型对象间使用)
    访问(索引与切片)
  • 其它操作
    BIF:
    □ len , reversed , zip(序列拼接) ,sorted , enumerate(枚举)
    □ max, min, sum
    □ all(判断是否都为空), any(判断是否含有空元素)
    序列类型转换
    □ list() , str() , tuple()

列表List

  • 初始化
  • 列表属性
  • 列表操作
    □ 访问
    □ 成员操作
    □ +与*
    □ 比较,排序
    □ 其它操作
#列表内部操作
l1[3]='Caffe'#赋值
l1.append(l2)#添加到未尾,如果元素是列表,也是按照列表添加进来,只添加一个元素
l1.extend(['Torch'])#扩展,如果是扩展元素是列表,是只添加列表内的元素,可以一次性添加多个元素
l1.insert(0,'sklearn')#插入元素,按索引
l1.index('sklearn')#获得指定元素的索引位置,如果存在相同元素,返回的是从右到左第一个的索引位置
l1.count('AI')#统计元素出现的次数
l1.pop()#返回并弹出最后一个元素(即元素会被删除)
l1.pop(3)#返回并弹出指定索引位置的元素
del l1[-1] #删除列表元素,按索引位置删除
l1.remove('AI')#指定元素进行删除,如果存在相同元素,则删除从左至右第一个元素

#列表操作
reversed(l1) #对列表进行反转,返回一个reversed对象,要list化才会显示
sorted(l1)
l2<l3 #列表比较,逐元素进行对比

列表推导式 list comprehension

  • 定义:
    □ 列表推导式也叫列表解析式(list comprehension),是利用现有列表创建新列表。
    □ 这种可以非常简洁的方式来快速生成满足特定需求的列表,代码可读性强
    □ Python的内部实现对列表推导式做了大量优化,可以保证很快的运行速度。
  • 语法:
    □ [表达式 for 变量 in 列表]
    □ [表达式 for 变量 in 列表 if 条件]

元组Tuple

  • 元组tuple是只读有序序列。方法较list少。
    (tuple是不可修改的,即元组里的元素是不可修改,除了列表和字典)
  • 可以认为tuple是只读列表,它有许多操作和list很接近,除了对其进行修改。
    (元组只能和元组之间进行运算,否则报错。(1,2)+4是错的,(1,2)+(4,)=(1,2,4))

集合Set

  • 集合set:一组key的无序排列集合,因此无法用索引切片访问
  • 主要作用:用于去重及集合间操作
  • 集合内部操作:
    a.add('f') #添加key
    a.remove('AI') #删除key
  • 集合间操作:
    □ 交集
    □ 并集
    □ 差集
    □ 集合与元组
#集合间操作
a=set('abcde')
b=set('cdefg')

# &交集
a&b
# 结果:{'c', 'd', 'e'}

# |并集
a|b
# 结果:{'a', 'b', 'c', 'd', 'e', 'f', 'g'}

# -差集
a-b
# 结果:{'a', 'b'}

#合并
a.update(b)#集合合并

字典Dictionary

记住:字典和集合都不是序列,因此无法用切片和索引

  • 定义:字典这种数据结构,是把一个元素映射到另一个元素上,可以简单理解为k:v对应。
  • 常见操作:
    □ 初始化 (可以用{},或者dict())
    □ 成员判断 (只针对key)
    □ 访问
    □ 字典推导式
  • Key值的选取:Key值必须是可被哈希的,也就是说key只能是数字,字符串或元组
#新增成员
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()

#Key值的选取,能被hash的值都可以做为key,即不可变类型可以做为key值。
hash('a')

Python内存管理

□ 变量与对象之间关系:引用
□ 查看一个对象被引用总数

#在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=5#创建了三个变量,均指向一个int类型的对象5,一个对象可以被多个引用指向
>>del c#删除c这个变量对5的引用
>>a=[1,2,3]#把a这个变量的指向,重新指向了一个列表对象,引用可以随时指向一个新的对象
>>print(b)#b依旧指向5,5没有被改变
5

#什么是可变对象?
>>a=b=c=[1,2,3]
>>print(a,b,c)
[1, 2, 3] [1, 2, 3] [1, 2, 3]
>>a.append(4)#通过a能真正改变列表[1,2,3],
>>print(a,b,c)#通过引用其元素,改变对象自身
[1, 2, 3, 4] [1, 2, 3, 4] [1, 2, 3, 4]

#什么是不可变对象?
>>a=b=c='beijing'
>>a='shanghai'
#打印a,b,c,d指向对象的id,看看是否是一个家伙
>>print('id(a):',id(a),'id(b):',id(b),'id(c):',id(c))
id(a): 2246883863600 id(b): 2246883876232 id(c): 2246883876232

#看似是把a变量指向的字符串从beijing,改为shanghai,但其它并没有改变beijing,只是a的指向被改变了
>>print(a,b,c)#不能改变对象本身,只能改变引用的指向
shanghai beijing beijing

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值