文章目录
1. 元组
1.1 元组基本介绍
- 元组表现形式tuple
- 元组是一个不可变序列(一般当我们希望数据不改变时,我们使用元组,其他情况下基本都用列表)
- 使用()创建元素
- 元组不是空元组至少有一个 逗号(,) 当元组不是空元组时括号可以省略
- 元组解包指将元组当中的每一个元素都赋值给一个变量
1.2 元组创建
>>> tu = ()
>>> tu
()
>>> tu1 = tuple()
>>> tu1
()
>>> type(tu)
<class 'tuple'>
>>> type(tu1)
<class 'tuple'>
1.3 元组与列表相同的操作
- 使用方括号加下标访问元素
>>> tu = (1,2,3,4,5)
>>> tu[1]
2
- 切片(形成新元组对象)
>>> tu
(1, 2, 3, 4, 5)
>>> tu[2:4]
(3, 4)
- tuple.count()/tuple.index()
>>> tu1 = (1,2,3,4,5,5,5,4)
>>> tu1.count(5)
3
>>> tu1.index(5)
4
- 列表中还有list.reverse()与list.sort(),但是元组没有,但是要实现反转与排序可以使用python中的内置函数:reversed(),sorted()
>>> tu1
(1, 2, 3, 4, 5, 5, 5, 4)
>>> reversed(tu1)
<reversed object at 0x000001B9FE543C88>
>>> tuple(reversed(tu1))
(4, 5, 5, 5, 4, 3, 2, 1)
>>> tu = (1,2,3,5,4,3)
>>> sorted(tu) # 升序
[1, 2, 3, 3, 4, 5]
- len()/max()/min()/tuple()
1.4 元组中不允许的操作
- 不允许修改、新增元素
>>> tup = (1,2,3)
>>> tup[2] = 5
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
一旦想改变该元组,就只能重新开辟一块内存,创建新的元组
>>> tup = (1,2,3)
>>> new_tup = tup+(4,)
>>> new_tup
(1, 2, 3, 4)
注意:元组只保证它的一级子元素不可变,对于嵌套的元素内部,不保证不可变。如下:
>>> tup = (1,2,3,['amy',5]) # 将'amy'改为4
>>> tup[3][0] = 4
>>> tup
(1, 2, 3, [4, 5])
>>> tup1 = (1,2,3,('amy',5)) # 将'amy'改为4
>>> tup1[3][0] = 4
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
- 不允许删除某个元素(但可以删除整个元组)
实际上,所有会对元组内部元素发生修改动作的方法。
例如,元组没有remove,append,pop等方法
1.5 列表和元组的转换
- 元组转为列表
>>> tu = (1,2,3)
>>> list(tu)
[1, 2, 3]
- 列表转为元组
>>> li = [1,2,3]
>>> tuple(li)
(1, 2, 3)
1.6 可变对象
Python中,数值类型(int和float)、字符串str、元组tuple都是不可变类型。而列表list、字典dict、集合set是可变类型
可变对象中都保存了三个数据
- id(标识)
- type(类型)
- value(值)
2. 字典简介
2.1 字典的基本介绍
- 字典属于一种新的数据结构称为映射(mapping)
- 字典的作用和列表类似,都是用来存储对象的容器
- 列表存储数据的性能好,但是查询数据的性能差,字典正好与之相反
- 在字典中每一个元素都有唯一的名字,通过这个唯一的名字可以找到指定的元素
- 这个唯一的名字我们称之为key 通过key可以快速查询value 也可以称之为值
- 字典我们也称之为键值对(key-value)结构
- 每个字典中都可以有多个键值对,而每一个键值对我们称其为一项(item)
- 创建一个有数据的字典 语法 {key:value}
- 字典的值可以是任意对象 字典的键可以是任意的不可变对象(int str bool tuple…)
- 字典的键是不能重复的,如果出现重复的后面的会替换前面的
- 简而言之,字典可精确描述为不定长、可变、无序、散列的集合类型
2.2 创建字典
- 创建空字典
>>> dic = {}
>>> dic
{}
>>> type(dic)
<class 'dict'>
>>> dict()
{}
- 创建字典三种方式
>>> dic = {}
>>> dic
{}
>>> type(dic)
<class 'dict'>
>>> dict()
{}
2.3 访问字典
字典是集合类型,不是序列类型,因此没有索引下标的概念,更没有切片的说法。但是,与list类似,字典采用把相应的键放入方括号内获取对应值的方式取值。
>>> dic1 = {'name':'amy','age':18}
>>> dic1['name']
'amy'
>>> dic1['gender'] # 当key值不存在时,则报错
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'gender'
2.4 增加和修改
增加就是往字典插入新的键值对,修改就是给原有的键赋予新的值。由于一个key只能对应一个值,所以,多次对一个key赋值,后面的值会把前面的值冲掉。
>>> dic1 = {'name':'amy','age':18}
>>> dic1['gender'] = "female" # 增加key值为"gender",value值为"female"的元素
>>> dic1
{'name': 'amy', 'age': 18, 'gender': 'female'}
>>> dic1['gender'] = 'male' # 当有该key:value值时,取出来重新赋值则进行了修改
>>> dic1
{'name': 'amy', 'age': 18, 'gender': 'male'}
2.5 删除字典元素、清空字典和删除字典
使用del关键字删除字典元素或者字典本身,使用字典的clear()方法清空字典
>>> dic1
{'name': 'amy', 'age': 18, 'gender': 'male'}
>>> del dic1['name'] # 删除某key:value元素
>>> dic1
{'age': 18, 'gender': 'male'}
>>> dic1
{'age': 18, 'gender': 'male'}
>>> dic1.clear() # 清空字典
>>> dic1
{}
>>> del dic1 # 删除整个字典
>>> dic1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'dic1' is not defined
2.6 字典的使用
函 数 | 作 用 | 备 注 |
---|---|---|
dict() | 来创建字典 | |
update() | 将其他字典的key-value添加到当前的字典当中 | |
del | 删除字典中的key-value | |
get(key[,default]) | 根据键来获取字典的值 | 第二个参数可以指定一个默认值,当获取不到值的时候会返回默认值 |
popitem() | 删除字典最后的一个key-value | 这个方法是有返回值的,删除之后它会将删除的key-value作为返回值返回 |
pop(key[,default]) | 根据key删除自定中的value | 第二个参数可以指定一个默认值,当获取不到值的时候会返回默认值 |
copy() | 方法用来对字典进行潜复制 | 潜复制只会复制字典本身,如果字典中还有个字典是不会进行复制的 |
2.7 遍历字典
我们主要可以通过3种方式对字典进行遍历
- keys():该方法返回字典所有的key
- values():该方法返回一个序列 序列中保存有字典的值
- items():该方法会返回字典中所有的项 它返回一个序列,序列中包含有双值子序列 双值分别是 字典中的key和value
>>> dic1 = {'name':'amy','age':18}
>>> dic1.get('name')
'amy'
>>> dic1.get('gender') # 当key:value不存在时,返回None
>>> dic1.items()
dict_items([('name', 'amy'), ('age', 18)])
>>> for k,v in dic1.items():
... print(k,v)
...
name amy
age 18
>>> dic1.keys()
dict_keys(['name', 'age'])
>>> dic1.values()
dict_values(['amy', 18])
3. 集合
3.1 集合简介
- 集合概念:set集合是一个无序不重复元素的集,基本功能包括关系测试和消除重复元素
- 集合数据类型的核心:自动去重
- 集合表现形式:set(集合和列表非常相似)
- 不同点
- 集合只能存储不可变对象
- 集合中存储的对象是无序的
- 集合不能出现重复元素
- 使用{}来创建集合
3.2 创建集合
集合使用大括号({})框定元素,并以逗号进行分隔。但是注意:如果要创建一个空集合,必须用 set() 而不是 {} ,因为后者创建的是一个空字典。
>>> s = {1,2,3}
>>> s
{1, 2, 3}
>>> type(s)
<class 'set'>
>>> s = {} # 注意,空的{}会默认为字典
>>> type(s)
<class 'dict'>
- 集合还可以使用set()函数来创建。
使用方法如下: - set() -> new empty set object(创建空集合)
>>> s = set() # 创建空集合
>>> s
set()
>>> type(s)
<class 'set'>
- set(iterable) -> new set object(创建集合)
>>> s = set([1,2,3,1,2,3,4]) # 创建集合,去重
>>> s
{1, 2, 3, 4}
>>> s1 = set("hello world") # 创建集合,去重
>>> s1
{'h', 'd', 'o', ' ', 'e', 'l', 'r', 'w'}
>>> s2 = set(123) # 注意,需要传入可迭代的对象,而int类型的123并不是,所以报错
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
3.3 集合添加元素
通过add(key)方法可以添加元素到set中,可以重复添加,但不会有效果:
>>> s = set([1,2,3,1,2,3,4])
>>> s
{1, 2, 3, 4}
>>> s.add(3) # 重复添加,自动去重
>>> s
{1, 2, 3, 4}
>>> s.add(6) # 添加成功
>>> s
{1, 2, 3, 4, 6}
>>> s.add("amy") # 添加成功
>>> s
{1, 2, 3, 4, 6, 'amy'}
>>> s.add([1,2,3]) # 报错,同字典一样 不能添加可变对象
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
3.4 集合更新
可以通过update()方法,将另一个对象更新到已有的集合中,这一过程同样会进行去重。
>>> s = set([1,2,3,4,5])
>>> s.update("hello") # 将hello拆开放入集合
>>> s
{1, 2, 3, 4, 5, 'h', 'o', 'e', 'l'}
>>> s.update("hello") # 仍然去重
>>> s
{1, 2, 3, 4, 5, 'h', 'o', 'e', 'l'}
3.5 删除元素
通过remove(key)方法删除指定元素,或者使用pop()方法。注意,集合的pop方法无法设置参数,删除指定的元素:
- set.remove()
>>> s = {1, 2, 3, 4, 5, 'h', 'o', 'e', 'l'}
>>> s.remove(1) # 删除该元素
>>> s
{2, 3, 4, 5, 'h', 'o', 'e', 'l'}
>>> s.remove('h') # 删除该元素
>>> s
{2, 3, 4, 5, 'o', 'e', 'l'}
>>> s.remove('www') # 删除不存在的元素则报错
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'www'
- set.pop()
>>> s1 = set("hello world")
>>> s1.pop()
'h'
>>> s1.pop()
'd'
>>> s1.pop() # 注意是随机删除
'o'
>>> s1.pop(1) # 不能通过索引删除,因为本身无序
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: pop() takes no arguments (1 given)
需要注意的是,集合不能取出某个元素,因为集合既不支持下标索引也不支持字典那样的通过键值对获取。
>>> s1
{' ', 'e', 'l', 'r', 'w'}
>>> s1[1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'set' object does not support indexing
集合数据类型属于Python内置的数据类型,但不被重视,在很多书籍中甚至都看不到一点介绍。其实,集合是一种非常有用的数据结构,它的去重和集合运算是其它内置类型都不具备的功能,在很多场合有着非常重要的作用,比如网络爬虫。
3.6 集合的方法
函数 | 作用 |
---|---|
set() | 将序列和字典转换成集合 |
len() | 获取集合中元素的数量 |
add() | 向集合中添加元素 |
update() | 将一个集合中的元素添加到另一个集合当中 |
pop() | 随机删除集合中的一个元素一般是删除最后一个元素 |
remove() | 删除集合中指定的元素 |
clear() | 清空集合 |
3.7 集合的运算
&
交集运算|
并集运算-
差集运算^
亦或集<=
检查一个集合是否是另一个集合的子集<
检查一个集合是否是另一个集合的真子集>=
检查一个集合是否是另一个集合的超集>
检查一个集合是否是另一个集合的真超集