Python学习 --元组,字典和集合

Python学习 --元组,字典和集合

    • 元组
      • 元组和列表的异同
    • 字典
      • 定义
      • 特性
      • 操作
      • 循环遍历
      • 字典推导式
      • 字典(哈希算法) VS 列表
      • 字典-hash
    • 集合
      • 定义
      • 作用
      • 用法

元组

由一系列变量组成的不可变有序序列容器,以()包括,如果只有一个元素,则必须添加一个逗号,否则就不是元组

基本操作同字符串差不多

元组和列表的异同

  • 元组与列表都可以存储一系列变量,由于列表会预留内存空间,所以可以增加元素
  • 元组会按需分配内存,所以如果变量数量固定,建议使用元组,因为占用空间更小。
  • 格式字符串,格式化字符串后面的()本质上就是一个元组
  • 让列表不可以被修改,以保护数据安全
  • 元组可以进行**“解包”**操作,即name, age = ("名字",25) print(name,age)

字典

定义

msg = {
    key:value1,
    key2:value2,
    ...
}

dictionary(字典)是 除列表以外 Python 之中 最灵活 的数据类型

  • 字典同样可以用来存储多个数据
    • 通常用于存储描述一个物体的相关信息
  • 和列表的区别
    • 列表是有序的对象集合
    • 字典是无序的对象集合

​ 集合就意味着可以遍历

特性

  • 字典使用键值对存储数据,键值对之间使用分隔

  • 键 key 是索引

  • 值 value 是数据

  • 键 和 值之间使用:分隔

  • 键必须是唯一的

  • key 必须为不可变数据类型 (字符串、数字、元组)

  • 值可以取任何数据类型,但键只能使用 字符串、数字或元组

  • 一个key对应的value可存放任意数据类型,可修改、可以不唯一

  • 可嵌套,即value也可以是dict

  • py3.7之前是无序的,3.7开始变成有序的。ordered dict

  • 查询速度快,且不受dict的大小影响。至于为什么快? 需要了解hash O(1)

  • 看到{}首先想到的是字典

操作

# 查询
print(dic["key1"]["key2"])	# 根据 key1 key2 键值从 dic 中查询数据
print(dic.get("key"))		# 根据 key 键值从 dic 中查询数据
	# get 方法如果没有取到对应的键值对,不会报错,返回 None 
print(dic.keys())			# 打印所有的 key 键,返回一个 字典键 类型,其无序但可以遍历
print(dic.values())			# 打印所有的 value 值,返回一个 字典值 类型,其无序但可以遍历
print(dic.items())			# 以元组形式打印所有的 键值对

# 增加 和 修改
dic["key3"] = "value3"		# 新增后字典为{"key1":"value1","key2":"value2","key3":"value3"}
dic["key2"] = "value4"		# 修改后字典为{"key1":"value1","key2":"value4","key3":"value3"}
	# 增加和修改 如果有这个键就对该键对应的值进行修改,如果没有这个键就新增。

# 新增
dic.setdefault(key,value)	# 如果有这个键就不修改,如果没有这个键就新增,即设置默认值
# 修改
dic1.update(dic2)			# 将字典2中的数据合并到字典1中

# 删除
dic.pop("key1")				# 删除指定键值对应的键值对,如果没有会报错,删除后字典为{"key2":"value2","key3":"value3"}
dic.popitem()				# 3.7 之前是随机删除一个键值对,3.7之后是删除最后一个键值对
dic.clear()					# 清空字典数据

# 浅拷贝
dic.copy()					# 同列表的 copy 一样

循环遍历

for k in dic.keys(): 

for k,v in dic.items(): 

for k in dic:

字典推导式

使用简易方法,将可迭代对象转换为字典

{:for 变量 in 可迭代对象}

{:for 变量 in 可迭代对象 if 条件}

字典(哈希算法) VS 列表

  • 都是可变容器。
  • 获取元素方式不同,列表用索引,字典用键。
  • 字典的插入,删除,修改的速度快于列表。
  • 列表的存储是有序的,字典的存储是无序的。

字典-hash

因为dict 是基于 hashtable 实现的,hashtable 的原理导致你查询速度就是O(1),意思就是你即使有1亿个数据,查询某个值也是1. 字典是 python 中唯一的一个映射类型,他是以{}括起来的键值对组成,在 dict 中 key 是唯一的,在保存 的时候,根据key来计算出一个内存地址,然后将key-value保存在这个地址中,这种算法被称为 hash 算法,所以切记,在 dict 中存储的 key-value 中 key 必须是可 hash 的

可以改变的都是不可哈希的

已知的可哈希(不可变)的数据类型: int ,str , tuple ,bool 不可哈希(可变)的数据类型: list,dict,set

字典的key必须是可哈希的,不可变的,value没有限制 由一系列键值对组成的可变映射容器

映射: 一对一的对应关系,且每条记录无序

集合

定义

集合跟我们学的列表有点像,也是可以存放一堆数据

不过集合有几个独特的特点,令其在整个Python语言中占有一席之地。相当于只有键没有值的字典(键则是集合的数据)。

  • 里面的元素不可变,代表不能存储一个list、dict、
  • 在集合中,字符串、数字、元组等不可变类型可以存。
  • 天生自带去重,在集合中没有办法存储重复的元素。
  • 无序、不像列表一样通过索引来标记在列表中的位置,元素是无序的,集合的元素无先后之分,如集合{2,3,4}和{3.2,4}算作相同集合。

很少会去用集合来循环

作用

去重和关系运算

用法

# 定义
set = {key1,key2,key3...}

无序的,可变的容器

可变的:list dict set

不可变的:number str tuple

你可能感兴趣的:(python,学习)