目录
1.1 元组()
元组和列表类似,但属于不可变序列,元组一旦创建,用任何方法都不可以修改其元素
元组的定义方式和列表相同,但定义时所有元素是放在一对圆括号“()”中,而不是方括号中。
1.1.1元组创建与删除
1) 使用“=”将一个元组赋值给变量
>>> a_tuple = ('a', 'b', 'mpilgrim', 'z', 'example')
>>> a_tuple
('a', 'b', 'mpilgrim', 'z', 'example')
>>> a = (3)
>>> a
3
>>> a = (3,) #包含一个元素的元组,最后必须多写个逗号
>>> a
(3,)
>>> a = 3, #也可以这样创建元组
>>> a
(3,)
>>> x = () #空元组
2)使用tuple函数将其他序列转换为元组
>>> tuple('abcdefg') #把字符串转换为元组
('a', 'b', 'c', 'd', 'e', 'f', 'g')
>>> aList
[-1, -4, 6, 7.5, -2.3, 9, -11]
>>> tuple(aList) #把列表转换为元组
(-1, -4, 6, 7.5, -2.3, 9, -11)
>>> s = tuple() #空元组
>>> s
()
3)使用del可以删除元组对象,不能删除元组中的元素
元组与列表的区别
- 元组一旦定义就不允许更改。
- 元组没有append()、extend()和insert()等方法,无法向元组中添加元素。
- 元组没有remove()或pop()方法,也无法对元组元素进行del操作,不能从元组中删除元素
- 元组的速度比列表更快。如果定义了一系列常量值,而所需做的仅是对它进行遍历,那么一般使用元组而不用列表
- 元组对不需要改变的数据进行“写保护”将使得代码更加安全。
- 元组可用作字典的“键”,也可以作为集合的元素。列表不能作为字典的“键”,包含列表、字典、集合或其他类型可变对象的元组也不能做字典的“键”。
- 如果元组中包含列表或其他类型的可变对象,这些对象是可变的,但元组元素的引用仍是不可变的。
>>> x = ([1, 2], 3) >>> x[0][0] = 5 >>> x ([5, 2], 3) >>> x[0].append(8) >>> x ([5, 2, 8], 3) >>> x[0] = x[0]+[10] TypeError: 'tuple' object does not support item assignment >>> x ([5, 2, 8], 3) >>> x[0] += [10] TypeError: 'tuple' object does not support item assignment >>> x ([5, 2, 8, 10], 3)
2.1 字典{}
- 字典是无序、可变序列。
- 定义字典时,每个元素的键和值用冒号分隔,元素之间用逗号分隔,所有的元素放在一对大括号“{}”中。
- 字典中的键可以为任意不可变数据,比如整数、实数、复数、字符串、元组等等。
- globals()返回包含当前作用域内所有全局变量和值的字典
- locals()返回包含当前作用域内所有局部变量和值的字典。
2.1.1 字典创建与删除
1)使用=将一个字典赋值给一个变量
>>> a_dict = {'server': 'db.diveintopython3.org', 'database': 'mysql'}
>>> a_dict
{'database': 'mysql', 'server': 'db.diveintopython3.org'}
>>> x = {} #空字典
>>> x
{}
2)使用dict利用已有数据创建字典
>>> keys = ['a', 'b', 'c', 'd']
>>> values = [1, 2, 3, 4]
>>> dictionary = dict(zip(keys, values))
>>> dictionary
{'a': 1, 'b': 2, 'c': 3, 'd': 4}
>>> x = dict() #空字典
>>> x
{}
3)使用dict根据给定的键、值创建字典
>>> d = dict(name='Dong', age=37)
>>> d
{'name': 'Dong', 'age': 37}
4)以给定内容为键,创建值为空的字典
>>> adict = dict.fromkeys(['name', 'age', 'sex'])
>>> adict
{'name': None, 'age': None, 'sex': None}
5)可以使用del删除整个字典
2.1.2 字典元素的读取
1)以键作为下标可以读取字典元素,若键不存在则抛出异常
>>> aDict = {'name':'Dong', 'sex':'male', 'age':37}
>>> aDict['name']
'Dong'
>>> aDict['tel'] #键不存在,抛出异常
Traceback (most recent call last):
File "<pyshell#53>", line 1, in <module>
aDict['tel']
KeyError: 'tel'
2)使用字典对象的get()方法获取指定键对应的值,并且可以在键不存在的时候返回指定值。
>>> print(aDict.get('address'))
None
>>> print(aDict.get('address', 'SDIBT'))
SDIBT #若address有对应的值则返回,没有则返回指定的值SDIBT
3)使用字典对象的items()方法可以返回字典的元素。
4)使用字典对象的keys()方法可以返回字典的“键”。
5)使用字典对象的values()方法可以返回字典的“值”
>>> aDict = {'name':'Dong', 'sex':'male', 'age':37}
>>> for key, value in aDict.items(): #序列解包用法
print(key, value)
name Dong
sex male
age 37
>>> aDict.keys() #返回所有“键”
dict_keys(['name', 'sex', 'age'])
>>> aDict.values() #返回所有“值”
dict_values(['Dong', 'male', 37])
2.1.3 字典元素的添加与修改
当以指定键为下标为字典赋值时:
1)若键存在,则可以修改该键的值;
2)若不存在,则表示添加一个键、值对。
>>> aDict['age'] = 38 #修改元素值
>>> aDict
{'age': 38, 'name': 'Dong', 'sex': 'male'}
>>> aDict['address'] = 'SDIBT' #增加新元素
>>> aDict
{'age': 38, 'address': 'SDIBT', 'name': 'Dong', 'sex': 'male'}
3)使用字典对象的update()方法将另一个字典的键、值对添加到当前字典对象。
>>> aDict
{'age': 37, 'score': [98, 97], 'name': 'Dong', 'sex': 'male'}
>>> aDict.items()
dict_items([('age', 37), ('score', [98, 97]), ('name', 'Dong'), ('sex', 'male')])
>>> aDict.update({'a':'a','b':'b', 'age':43})
>>> aDict
{'age': 43, 'score': [98, 97], 'name': 'Dong', 'sex': 'male', 'a': 'a', 'b': 'b'}
4)使用del删除字典中指定键的元素
5)使用字典对象的clear()方法来删除字典中所有元素
6)使用字典对象的pop()方法删除并返回指定键的元素
7)使用字典对象的popitem()方法删除并返回字典中的一个元素
3.1 集合 {}
集合是无序、可变序列,使用一对大括号界定,元素不可重复,同一个集合中每个元素都是唯一的
集合中只能包含数字、字符串、元组等不可变类型(或者说可哈希)的数据,而不能包含列表、字典、集合等可变类型的数据
3.1.1 集合的创建与删除
1)直接将集合赋值给变量
>>> a = {3, 5}
2)使用set将其他类型数据转换为集合
>>> a_set = set(range(8,14))
>>> a_set
{8, 9, 10, 11, 12, 13}
>>> b_set = set([0, 1, 2, 3, 0, 1, 2, 3, 7, 8]) #自动去除重复
>>> b_set
{0, 1, 2, 3, 7, 8}
>>> c_set = set() #空集合
>>> c_set
set()
3) 当不再使用某个集合时,可以使用del命令删除整个集合
4)集合对象的pop()方法弹出并删除其中一个元素
5)remove()方法直接删除指定元素
6)clear()方法清空集合
>>> a = {1, 4, 2, 3}
>>> a.pop()
1
>>> a.pop()
2
>>> a
{3, 4}
>>> a.add(2)
>>> a
{2, 3, 4}
>>> a.remove(3)
>>> a
{2, 4}
3.1.2 集合运算
1)交集、并集、差集、对称差集等运算
>>> a_set = set([8, 9, 10, 11, 12, 13])
>>> b_set = {0, 1, 2, 3, 7, 8}
>>> a_set | b_set #并集
{0, 1, 2, 3, 7, 8, 9, 10, 11, 12, 13}
>>> a_set & b_set #交集
{8}
>>> a_set - b_set
{9, 10, 11, 12, 13}
>>> a_set ^ b_set #对称差集
{0, 1, 2, 3, 7, 9, 10, 11, 12, 13}
2)集合包含关系测试
>>> x = {1, 2, 3}
>>> y = {1, 2, 5}
>>> z = {1, 2, 3, 4}
>>> x < y #比较集合大小/包含关系
False
>>> x < z #真子集
True
>>> y < z
False
>>> {1, 2, 3} <= {1, 2, 3} #子集
True