python元组、字典、集合 及其相关操作方法

一:元组 tuple

    元组tuple是一种有序“列表”,它和list非常相似,不同的是tuple一旦初始化就不能修改,所以说元组是不可变类型;但注意,这里说的不可变是元组对其每个元素的指向不变,如元组中有一个元素是列表,此时列表中的元素是可以被改变的,但元组对这个列表的指向始终不会被改变。

    定义一个元组的语法为  atuple = ('a',1,'b')   元组的元素可以是任意的数据类型

#当元组只有一个元素时,定义时需要注意在第一个元素后面加一个逗号
a1 = ('a')     #此时python会把()当作数学公式中的小括号来处理,所以打印a1 时会把a1 当成字符串类型打印
a2 = ('a',)    # 在第一个元素后面写上一个逗号,这样python就能识别出它是元组了
b1 = (1)
b2 = (1,)
print(a1,b1,a2,b2)
a 1 ('a',) (1,)

    元组的操作方法(大致同列表,除修改类的方法):

atuple = ('a',1,4,'a','b','a')
print(atuple.count('a'))      #count()用于统计指定元素的个数
print(atuple.index('a',2,5))   #index()用于取得指定元素的索引值,第二个参数和第三个参数表示查找范围

二:字典 dict

    字典是一种通过 键:值 对的形式存多个元素的数据类型。其语法为:adict = {key:value,key:value,key:value.....}用逗号分隔各个元素。字典是无序的,不能通过索引来操作 

    和list比较,dict有以下几个特点:

  1. 查找和插入的速度极快,不会随着key的增加而变慢;
  2. 需要占用大量的内存,内存浪费多。

    而list相反:

  1. 查找和插入的时间随着元素的增加而增加;
  2. 占用空间小,浪费内存很少。

    所以,dict是用空间来换取时间的一种方法。

    必须注意的是:dict的key必须是不可变对象;这是因为dict是根据key来计算value的存储位置的,这种通过key计算位置的算法称为哈希算法(Hash);dict的value可以是任意数据类型

    字典的操作方法小结:

    1,根据key取其值 -查-

adict = {
    'name':'rock',
    'age':18,
    'city':'shanghai',
    'hobbies':['reading','coding','running']
}
print(adict['age'])        #这种方式有一个弊端,当传入的key不存在时会报错
print(adict.get('age'))    #当传入的key不存在时不会报错

    in 和  not in  可以用来查找字典中是否存在某个key,返回一个布尔值

     2,增-删-改

    向一个字典里增加项可以使用update()方法和setdefault()方法

adict = {
    'name':'rock',
    'age':18,
    'city':'shanghai',
    'hobbies':['reading','coding','running']
}
adict.setdefault('figure','handsome')   #若key已存在,则取其原值(即默认值),若key不存在,则向字典里增加这个key,第二个参数是用来为这个新key设置默认值的
print(adict)
#{'name': 'rock', 'age': 18, 'city': 'shanghai', 'hobbies': ['reading', 'coding', 'running'], 'figure': 'handsome'}
bdict = {
    'faimaly':'five',
    'city':'shenzheng'
}
adict.update(bdict)       #用新字典去更新旧字典,key若已存在则更新它的值,不存在则增加这对key:value
print(adict)
#{'name': 'rock', 'age': 18, 'city': 'shenzheng', 'hobbies': ['reading', 'coding', 'running'], 'faimaly': 'five'}
print(adict.pop('name'))   #按key取走值,并返回该值,字典中删除这一项
adict.popitem()  #从字典中随机删除一项
    改字典里的值  adict['age'] = 17    也可以用update()方法同时更改多个值

    3,其它方法

print(adict.keys()) #dict_keys(['name', 'age', 'city', 'hobbies'])
print(adict.values()) #dict_values(['rock', 18, 'shanghai', ['reading', 'coding', 'running']])
print(adict.items())  #dict_items([('name', 'rock'), ('age', 18), ('city', 'shanghai'), ('hobbies', ['reading', 'coding', 'running'])])

    adict.fromkeys()

三:集合 set

 aset = {1,2,3,'a','b'}  ;集合是一组key的集合,因为key不能重复,所有集合中不存在重复的元素

  集合元素需遵守以下原则:1,元素必须是不可变类型;2,没有重复的元素;3,无序

  集合最重要的作用:集合之间可以进行关系运算

# 集合之间的关系运算
aset = {'aaa','bbb','ccc','ddd','rock'}
bset = {'eee','bbb','fff','ggg','rock'}
# 交集  各集合共有的元素
print(aset & bset)
print(aset.intersection(bset))
# 并集   各集合的所有元素,有重复的元素只取一个
print(aset | bset)
print(aset.union(bset))
#差集  某集合的独有元素
print(aset - bset)
print(aset.difference(bset))
print(bset - aset)
print(bset.difference(aset))
#交叉补集   各集合的所有独有元素   等于并集-交集
print(aset ^ bset)
print(aset.symmetric_difference(bset))

    操作方法小结:

#查
# in  和 not in

#增
aset.add('kkk')     #一次只能增加一项
aset.update({'mmm','nnn','aaa','rock'})   #用一个新集合去更新原集合,重复的值则去掉

#删
aset.discard('rockjj')    #从集合中删除指定项,当该项不存在时不会报错
aset.remove('aaa')     #从集合中删除指定项,当该项不存在时会报错
aset.pop()       #随机从集合中取走一个值,并返回该值
aset.difference_update(bset)   #用差集去替换原集合

aset.isdisjoint(bset)   #当两个集合没有交集时返回True,反之返回False

四:补充内容

list()  #创造列表的内置方法,也可用于把其他数据类型转换成列表,转换时采用循环方式,依次取得其他类型的元素并把它们加入一个新列表
tuple()  #创造元组的内置方法,也可用于把其他数据类型转换成元组....
set()    #创造集合的内置方法,也可用于把其他数据类型(注意其中不能有可变类型的元素)转换成集合....
string = 'rock yey'
alist = ['aaa','bbb','ccc']
atuple = ('a','b','c')
aset = {'d','e','f'}
adict = {'name':'rock','age':18,'bobby':'coding'}
print(list(string))
print(list(alist))
print(list(atuple))
print(list(aset))
print(list(adict))       #会得到一个所有key的列表

print(tuple(string))
print(tuple(alist))
print(tuple(atuple))
print(tuple(aset))
print(tuple(adict))       #会得到一个所有key的元组

#当各种数据类型的元素都为不可变类型时才能使用set()方法
print(set(string))
print(set(alist))
print(set(atuple))
print(set(aset))
print(set(adict))        #会得到一个所有key的集合


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值