>>> tu = ()
>>> tu
()
>>> tu1 = tuple()
>>> tu1
()
>>> type(tu)
<class 'tuple'>
>>> type(tu1)
<class 'tuple'>
>>> tu = (1,2,3,4,5)
>>> tu[1]
2
>>> tu
(1, 2, 3, 4, 5)
>>> tu[2:4]
(3, 4)
>>> tu1 = (1,2,3,4,5,5,5,4)
>>> tu1.count(5)
3
>>> tu1.index(5)
4
>>> 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]
>>> tup = (1,2,3)
>>> tup[2] = 5
Traceback (most recent call last):
File "" , 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 "" , line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> tu = (1,2,3)
>>> list(tu)
[1, 2, 3]
>>> li = [1,2,3]
>>> tuple(li)
(1, 2, 3)
Python中,数值类型(int和float)、字符串str、元组tuple都是不可变类型。而列表list、字典dict、集合set是可变类型
可变对象中都保存了三个数据
>>> dic = {}
>>> dic
{}
>>> type(dic)
<class 'dict'>
>>> dict()
{}
>>> dic = {}
>>> dic
{}
>>> type(dic)
<class 'dict'>
>>> dict()
{}
字典是集合类型,不是序列类型,因此没有索引下标的概念,更没有切片的说法。但是,与list类似,字典采用把相应的键放入方括号内获取对应值的方式取值。
>>> dic1 = {'name':'amy','age':18}
>>> dic1['name']
'amy'
>>> dic1['gender'] # 当key值不存在时,则报错
Traceback (most recent call last):
File "" , line 1, in <module>
KeyError: 'gender'
增加就是往字典插入新的键值对,修改就是给原有的键赋予新的值。由于一个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'}
使用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 "" , line 1, in <module>
NameError: name 'dic1' is not defined
函 数 | 作 用 | 备 注 |
---|---|---|
dict() | 来创建字典 | |
update() | 将其他字典的key-value添加到当前的字典当中 | |
del | 删除字典中的key-value | |
get(key[,default]) | 根据键来获取字典的值 | 第二个参数可以指定一个默认值,当获取不到值的时候会返回默认值 |
popitem() | 删除字典最后的一个key-value | 这个方法是有返回值的,删除之后它会将删除的key-value作为返回值返回 |
pop(key[,default]) | 根据key删除自定中的value | 第二个参数可以指定一个默认值,当获取不到值的时候会返回默认值 |
copy() | 方法用来对字典进行潜复制 | 潜复制只会复制字典本身,如果字典中还有个字典是不会进行复制的 |
我们主要可以通过3种方式对字典进行遍历
>>> 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])
集合使用大括号({})框定元素,并以逗号进行分隔。但是注意:如果要创建一个空集合,必须用 set() 而不是 {} ,因为后者创建的是一个空字典。
>>> s = {1,2,3}
>>> s
{1, 2, 3}
>>> type(s)
<class 'set'>
>>> s = {} # 注意,空的{}会默认为字典
>>> type(s)
<class 'dict'>
>>> s = set() # 创建空集合
>>> s
set()
>>> type(s)
<class 'set'>
>>> 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 "" , line 1, in <module>
TypeError: 'int' object is not iterable
通过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 "" , line 1, in <module>
TypeError: unhashable type: 'list'
可以通过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'}
通过remove(key)方法删除指定元素,或者使用pop()方法。注意,集合的pop方法无法设置参数,删除指定的元素:
>>> 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 "" , line 1, in <module>
KeyError: 'www'
>>> s1 = set("hello world")
>>> s1.pop()
'h'
>>> s1.pop()
'd'
>>> s1.pop() # 注意是随机删除
'o'
>>> s1.pop(1) # 不能通过索引删除,因为本身无序
Traceback (most recent call last):
File "" , line 1, in <module>
TypeError: pop() takes no arguments (1 given)
需要注意的是,集合不能取出某个元素,因为集合既不支持下标索引也不支持字典那样的通过键值对获取。
>>> s1
{' ', 'e', 'l', 'r', 'w'}
>>> s1[1]
Traceback (most recent call last):
File "" , line 1, in <module>
TypeError: 'set' object does not support indexing
集合数据类型属于Python内置的数据类型,但不被重视,在很多书籍中甚至都看不到一点介绍。其实,集合是一种非常有用的数据结构,它的去重和集合运算是其它内置类型都不具备的功能,在很多场合有着非常重要的作用,比如网络爬虫。
函数 | 作用 |
---|---|
set() | 将序列和字典转换成集合 |
len() | 获取集合中元素的数量 |
add() | 向集合中添加元素 |
update() | 将一个集合中的元素添加到另一个集合当中 |
pop() | 随机删除集合中的一个元素一般是删除最后一个元素 |
remove() | 删除集合中指定的元素 |
clear() | 清空集合 |
&
交集运算|
并集运算-
差集运算^
亦或集<=
检查一个集合是否是另一个集合的子集<
检查一个集合是否是另一个集合的真子集>=
检查一个集合是否是另一个集合的超集>
检查一个集合是否是另一个集合的真超集