元组
上节提到的列表属于可变序列,可以任意修改列表中的元素。但元组属于不可变序列,不能对元组中的元素做增加、删除、修改。
元组的创建
-
通过()创建元组
小括号也可以省略,举例如下:
如果元组只有一个元素,则后面必须加逗号。否则解释器会把(1)解释为整数 1,只有(1,) 才会被解释为元组。 -
通过tuple()创建元组
格式为:tuple(可迭代的对象) ,举例如下:
元组的元素访问和计数
- 元组的元素不能修改
示例如下,若尝试修改将会报错。
- 元组的元素访问和列表一样
同样可以通过索引、切片访问,但注意:返回的仍然是元组对象。
>>> a=(1,2,3,4,5)
>>> a[1:3]
(2,3)
- 如果要对元组排序,只能使用内置函数 sorted(tupleObj),并生成新的列表对象。
>>> a = (20,10,30,9,8)
>>>> sorted(a) #发现生成的是列表而非元组
[8, 9, 10, 20, 30]
元组中“+”和zip的使用
- “+”在元组中仍然起到拼接作用,举例如下:
此外,len(),min(),max(),sum()等使用均与列表相同。 - zip(列表 1,列表2,…)将多个列表对应位置的元素组合成为元组,并返回这个 zip对象。
生成器推导式创建元组
- 注意:生成器推导式生成的不是列表也不是元组,而是一个生成器对象,可以通过生成器对象,转化成列表或者元组。
- 生成器有指针,遍历时视为指针移动,故遍历一次结束后再试图__next__() 就会报错,其只能用一次。
>>> s = (x*2 for x in range(5))
>>>> s
<generator object <genexpr> at 0x0000000002BDEB48>
>>> tuple(s)
(0, 2, 4, 6, 8)
>>> list(s) #只能访问一次元素。第二次就为空了。需要再生成一次
[]
>>> s
<generator object <genexpr> at 0x0000000002BDEB48>
>>> tuple(s)
()
>>> s = (x*2 for x in range(5))
>>> s.__next__()
0
>>> s.__next__()
2
>>> s.__next__()
4
另外,元组与整数和字符串一样,可以作为字典的键,列表则永远不能作为字典的键使用。
字典
字典是“键值对”的无序可变序列,字典中的每个元素都是一个“键值对”。包含:“键 对象”和“值对象”。
字典的创建
- 通过{}、dict()来创建字典对象
举例如下:
- 通过zip()创建字典对象
举例如下: - 通过fromkeys创建值为空的字典
>>> a = dict.fromkeys(['name','age','job']) #只有键
>>> a
{'name': None, 'age': None, 'job': None}
字典元素的访问
假定,
a = {‘name’:‘xiaobai’,‘age’:3,‘color’:‘white’}
- 获得“值”的两种方法
>>> a['name']
'xiaobai'
>>> a.get['name']
'xiaobai'
- 依次获得所有的键值对、键、值
字典元素添加、修改、删除
- 新增“键值对”
若“键”已经存在,则覆盖旧的键值对(可理解为将值替换为新的);如果“键”不存在, 则新增“键值对”。 - 使用update()
将新字典中所有键值对全部添加到旧字典对象上。同样,如果key有重复,则直接覆盖,没有重复就添加。 举例如下:
- 元素的删除
1、使用del()方法;
2、clear()删除所有键值对;
3、pop()删除指定键值对,并返回对应的“值对象”;
运用举例: - popitem() :随机删除和返回该键值对。
注意,列表有序,故pop弹出最后一项,而字典无序,并没有最后一个元素的概念,故popitem弹出随机的项。运用举例:
集合
集合无序可变,元素不能重复。实际上,集合底层是字典实现,集合的所有元素都是字典 中的“键对象”,因此是不能重复且唯一的。
集合创建和删除
-
使用{}创建集合对象,并使用 add()方法添加元素,运用举例:
-
使用set(),将列表、元组等可迭代对象转成集合。运用举例如下:
注意:集合转换前若遇到重复数据,转换后将只保留其中一个。 -
remove()删除指定元素;clear()清空整个集合。运用举例: