一:元组 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有以下几个特点:
- 查找和插入的速度极快,不会随着key的增加而变慢;
- 需要占用大量的内存,内存浪费多。
而list相反:
- 查找和插入的时间随着元素的增加而增加;
- 占用空间小,浪费内存很少。
所以,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的集合