列表元素排序:
使用列表中的sort方法可以对列表中的元素按照指定规则进行排序,sort方法的语法格式如下:
ls.sort(key=None,reverse=False)
其中,key接收一个函数,通过该函数获取用于排序时比较大小的数据;reverse指定是将列表中的元素按升序(False,默认值)还是按降序(True)排列。
创建元组:
如果使用()创建的元组中只包含单个元素,则需要在这唯一的一个元素后面添加逗号,否则小括号会被系统认为是括号运算符、而不会被认为是在创建元组。
l=(3)
type(l)
Out[100]: int
l=(3,)
type(l)
Out[101]: tuple
拼接元组:
虽然元组中的元素值不允许修改,但通过拼接运算可以两个元组连接、生成一个新元组。
>>t1=(1,2,3) #创建元组对象并赋给变量t1
>>t2=('Python','C++') #创建元组对象并赋给变量t2
>>t3=t1+t2 #通过拼接运算“+ ”将t1和t2连接生成一个新的元组对象并赋给t3
>>t3
Out[106]: (1, 2, 3, 'Python', 'C++')
集合的创建:
可以使用一对大括号{}或set函数创建集合,如果要创建空集合则只能使用set函数。
集合中不能包含有重复值的元素。如果创建集合或向集合中插入元素时,指定的元素具有重复值,则集合会自动过滤掉重复值的元素、使得每种
取值的元素只保留一个。
aset={2,4,2,1}
aset
Out[109]: {1, 2, 4}
插入集合元素:
集合中提供了两种插入元素的方法,分别是add和update。add方法的语法
格式为:
s.add(x)
其作用是把x作为一个新的元素插入到集合s中,其中x必须是一个可哈希
对象。
aset={2,4,2,1}
aset.add([4,6])
aset
Traceback (most recent call last):
File "<ipython-input-118-480d0d729f02>", line 2, in <module>
aset.add([4,6])
TypeError: unhashable type: 'list'
因为add方法要求插入到集合中的元素必须是可哈希的,而列表是不可哈希的
aset={2,4,2,1}
aset.add(9)
aset
Out[115]: {1, 2, 4, 9}
update方法的语法格式为:
s.update(x)
其作用是把x拆分成多个元素后再将这多个元素插入到集合中,其中x必
须是一个可迭代对象。
aset={2,4,2,1}
aset.update(range(11,20))
aset
Out[116]: {1, 2, 4, 11, 12, 13, 14, 15, 16, 17, 18, 19}
aset={2,4,2,1}
aset.update('python')
aset
Out[117]: {1, 2, 4, 'h', 'n', 'o', 'p', 't', 'y'}
aset={2,4,2,1}
aset.update(6)
aset
Traceback (most recent call last):
File "<ipython-input-119-42c7d3954900>", line 2, in <module>
aset.update(6)
TypeError: 'int' object is not iterable
因为update方法要求传入的参数必须是可迭代的,而整数是不可迭代的。
集合的交集和并集、差集:
交集和并集:
集合中的intersection方法可以用于计算一个集合与另一个集合的交
集,语法格式为:s1.intersection(s2)其作用是计算s1和s2的交集并返回。intersection方法不会修改s1和s2本身的值。
集合中的union方法可以用于计算一个集合与另一个集合的并集,
语法格式为:s1.union(s2)其作用是计算s1和s2的并集并返回。union方法不会修改s1和s2本身的值。
aset=set([1,2,3])
bset=set([33,2])
cset=aset.intersection(bset)
dset=aset.union(bset)
cset
Out[133]: {2}
dset
Out[134]: {1, 2, 3, 33}
差集:
差集是指由包含在s1中但不包含在s2中的元素组成的集合。difference方法不会修改s1和s2本身的值。
aset.difference(bset)
Out[135]: {1, 3}
bset.difference(aset)
Out[136]: {33}
对称差集:
对称差集是指由只包含在s1中或只包含在s2中的元素组成的集合。symmetric_difference方法不会修改s1和s2本身的值。
aset.symmetric_difference(bset)
Out[138]: {1, 3, 33}
bset.symmetric_difference(aset)
Out[139]: {1, 3, 33}
集合的子集和父集:
集合中的issubset方法用于判断一个集合是否是另一个集合的子集,语法格式为:
s1. issubset(s2)
其作用是判断s1是否是s2的子集。如果s1是s2的子集,则返回True;否则,返回False。
{1,2}.issubset({1,2,3})
Out[140]: True
集合中的issuperset方法可以用于判断一个集合是否是另一个集合的父集,语法格式为:
s1.issuperset(s2)
其作用是判断s1是否是s2的父集(即判断s2是否是s1的子集)。如果s1是s2的父集,则返回True;否则,返回False。
{1,2,3,4}.issuperset({1,2,3})
Out[142]: True
{1,2,3}.issuperset({1,2,3})
Out[143]: True
字典的创建和初始化:
字典中每个元素键的取值必须唯一(即集合中不能包含键相同的元素)且必须是可哈希类型的数据,但对于每个元素值的取值则没有任何限制。
字典的主要应用是做数据的快速检索。实际使用字典时,将要查询的数据作为键,将其他数据作为值。例如,在进行学生信息管理时,经常要根据学号进行学生信息的查询,此时就可以将学号作为键、而将其他信息作为值。
可以使用一对大括号{}或dict函数创建字典,如果要创建空字典可以使用{}或dict()。
fromkeys方法的语法格式为:
d.fromkeys(seq[, value])
其中,d是一个已创建的字典对象;seq是一个包含了字典所有键名的序列;value是一个可选参数,其指定了各元素的初始值,默认情况下所有元素的值都被赋为None。
d1={}.fromkeys(['sno','name','major'])
d2=dict().fromkeys(['sno','name','major'], 'Unknown')
print('d1的值为:', d1)
print('d2的值为:', d2)
out:
d1的值为: {'sno': None, 'name': None, 'major': None}
d2的值为: {'sno': 'Unknown', 'name': 'Unknown', 'major': 'Unknown'}
提示:如果使用的字典对象中原来已经有其他元素,则
调用fromkeys方法后原有的元素都会被清除。例如,对
于下面的代码:
adict={'aa':10,'bb':32,'cc':89}
adict
Out[160]: {'aa': 10, 'bb': 32, 'cc': 89}
adict.fromkeys(['aa','bb','cc'])
Out[161]: {'aa': None, 'bb': None, 'cc': None}
字典元素的修改和插入:
给指定键的元素赋值时,如果该键在字典中已存在,则会将该键对应
的元素值做修改;如果该键在字典中不存在,则会在字典中插入一个
新元素。
另外,也可以使用字典中的update方法一次修改或插入多个元素,
update方法的语法格式为:
d.update(d2) #用另一个字典对象d2的元素修改或插入字典对象d的元素
或d.update(键1=值1, 键2=值2, …, 键N=值N) #用键值列表修改或插入字典对象d的元素
adict={'aa':10,'bb':32,'cc':89}
adict.update(aa=20,bb=45,ee=200)
adict
Out[169]: {'aa': 20, 'bb': 45, 'cc': 89, 'ee': 200}
字典元素的删除:
使用del可以删除某个元素,也可以使用字典中的pop方法删除指定键的元素。pop方法的语法格式为:d.pop(key[, default])
其作用是从字典d中删除键为key的元素并返回该元素的值;如果d中不存在键为key的元素,则返回default参数的值。
adict={'aa':10,'bb':32,'cc':89}
adict.pop('aa')
Out[179]: 10
adict
Out[180]: {'bb': 32, 'cc': 89}
adict.pop('tt',100)
Out[181]: 100
字典的浅拷贝:
使用字典中的copy方法可以实现一个字典的浅拷贝。copy
方法的语法格式为:d.copy()
其作用是返回一个对字典d进行浅拷贝而得到的新字典。
字典的深拷贝:
使用copy模块的deepcopy方法可以实现深拷贝,deepcopy方法的
语法格式为: copy.deepcopy(d)
其作用是根据字典d进行深拷贝创建一个新的字典对象并返回。
深拷贝不仅使得原有字典对象和生成的字典对象对应不同的内
存空间,而且使得两个字典对象中的可变类型元素对应不同的
内存空间,从而使得两个字典对象完全独立。
判断字典中是否存在键及拼接两个字典:
判断字典中是否存在键:
法1:
我们可以使用两种方法判断字典中是否存在某个键。一种
方法是使用字典中的get方法,其语法格式为:d.get(key, default=None)
其作用是从字典d中获取键为key的元素的值并返回。如果在
字典d中不存在键为key的元素,则返回default参数的值(默
认为None)。
adict={'aa':10,'bb':32,'cc':89}
adict.get('aa')
Out[200]: 10
adict.get('dd',100)
Out[201]: 100
法2:
另一种方法是使用成员运算符in。
adict={'aa':10,'bb':32,'cc':89}
'aa' in adict
Out[189]: True
拼接两个字典:
法1:
dMerge=dict(d1,**d2)
法2:
dMerge=d1.copy()
dMerge.update(d2)
其中,d1和d2是待拼接的两个字典,dMerge用于保存拼接后的字典。
adict={'aa':10,'bb':32,'cc':89}
bdict={'dd':100}
dict(adict,**bdict)
Out[197]: {'aa': 10, 'bb': 32, 'cc': 89, 'dd': 100}