Python小白的进阶之路(七):元组&字典&集合

文章目录

  • 1. 元组
      • 1.1 元组基本介绍
      • 1.2 元组创建
      • 1.3 元组与列表相同的操作
      • 1.4 元组中不允许的操作
      • 1.5 列表和元组的转换
      • 1.6 可变对象
  • 2. 字典简介
      • 2.1 字典的基本介绍
      • 2.2 创建字典
      • 2.3 访问字典
      • 2.4 增加和修改
      • 2.5 删除字典元素、清空字典和删除字典
      • 2.6 字典的使用
      • 2.7 遍历字典
  • 3. 集合
      • 3.1 集合简介
      • 3.2 创建集合
      • 3.3 集合添加元素
      • 3.4 集合更新
      • 3.5 删除元素
      • 3.6 集合的方法
      • 3.7 集合的运算

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 "", 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
  • 不允许删除某个元素(但可以删除整个元组)
    实际上,所有会对元组内部元素发生修改动作的方法。
    例如,元组没有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 "", 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 "", 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 "", 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 "", 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 "", 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 "", 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内置的数据类型,但不被重视,在很多书籍中甚至都看不到一点介绍。其实,集合是一种非常有用的数据结构,它的去重和集合运算是其它内置类型都不具备的功能,在很多场合有着非常重要的作用,比如网络爬虫。

3.6 集合的方法

函数 作用
set() 将序列和字典转换成集合
len() 获取集合中元素的数量
add() 向集合中添加元素
update() 将一个集合中的元素添加到另一个集合当中
pop() 随机删除集合中的一个元素一般是删除最后一个元素
remove() 删除集合中指定的元素
clear() 清空集合

3.7 集合的运算

  • & 交集运算
  • | 并集运算
  • - 差集运算
  • ^ 亦或集
  • <= 检查一个集合是否是另一个集合的子集
  • < 检查一个集合是否是另一个集合的真子集
  • >= 检查一个集合是否是另一个集合的超集
  • > 检查一个集合是否是另一个集合的真超集

你可能感兴趣的:(Python,python,列表,数据结构,程序人生)