python中的容器

通用操作

数学运算符

  1. +:用于拼接两个容器
  2. +=:用原容器与右侧容器拼接,并重新绑定变量
  3. *:重复生成容器元素
  4. *=:用原容器生成重复元素, 并重新绑定变量
  5. <,<=,>,>=,==,!=:依次比较两个容器中元素,一但不同则返回比较结果。

成员运算符

  1. 语法:

数据 in 序列
数据 not in 序列

  1. 作用:如果在指定的序列中找到值,返回bool类型

索引index

  1. 作用:定位单个容器元素
  2. 语法:容器[整数]
  3. 说明:

正向索引从0开始,第二个索引为1,最后一个为len(s)-1
反向索引从-1开始,-1代表最后一个,-2代表倒数第二个,以此类推,第一个是-len(s)

切片slice

  1. 作用:定位多个容器元素
  2. 语法:容器[(开始索引):(结束索引)(:(步长))]
  3. 说明:

小括号()括起的部分代表可省略
结束索引不包含该位置元素
步长是切片每次获取完当前元素后移动的偏移量

内建函数

len(x)   返回序列的长度
max(x)  返回序列的最大值元素
min(x)  返回序列的最小值元素
sum(x)  返回序列中所有元素的和(元素必须是数值类型)

字符串 str

由一系列字符组成的不可变序列容器,存储的是字符的编码值

编码

  1. 字节byte:计算机最小存储单位,等于8 位bit
  2. 字符:单个的数字,文字与符号
  3. 字符集(码表):存储字符与二进制序列的对应关系
  4. 编码:将字符转换为对应的二进制序列的过程
  5. 解码:将二进制序列转换为对应的字符的过程
  6. 编码方式:

ASCII编码:包含英文、数字等字符,每个字符1个字节
GBK编码:兼容ASCII编码,包含21003个中文;英文1个字节,汉字2个字节
Unicode字符集:国际统一编码,旧字符集每个字符2字节,新字符集4字节
UTF-8编码:Unicode的存储与传输方式,英文1字节,中文3字节

  1. 相关函数
    ord(字符串):返回该字符串的Unicode码
    chr(整数):返回该整数对应的字符串
    ord("a")   # 97
    ord("A")   # 65
    chr(97)    # a
    

字面值

单引和双引号的区别
  1. 单引号内的双引号不算结束符
  2. 双引号内的单引号不算结束符
三引号作用
  1. 换行会自动转换为换行符\n
  2. 三引号内可以包含单引号和双引号
  3. 作为文档字符串
转义字符
  1. 改变字符的原始含义
    \’ \” \””” \n \ \t \0 …
  2. 原始字符串:取消转义
    a = r'C:\newfile\test.py'
    
字符串格式化
  1. 定义:生成一定格式的字符串。
  2. 语法:字符串%(变量)
    "我的名字是%s,年龄是%s" % (name, age)
    
  3. 类型码:
    %s 字符串 %d整数 %f 浮点数
  4. format()函数:不需要考虑数据类型
    "我的名字是{},年龄是{}".format(name, age)
    

列表 list

由一系列变量组成的可变序列容器

基础操作

  1. 创建列表:

    列表名 = []
    列表名 = list(可迭代对象)

    # 创建空列表
    list01 = []
    list02 = list()
    # 创建非空列表
    list01 = [100,"python",True]
    # list(可迭代对象)
    list02 = list("人生苦短")  # ['人', '生', '苦', '短']
    
  2. 添加元素:

    列表名.append(元素)
    列表.insert(索引,元素)

    # 追加:在列表的末尾添加
    list01.append("HTML")  # [100,"python",True,"HTML"]
    # 插入:在制定位置添加
    list01.insert(1,"JS")  # [100,"JS","python",True,"HTML"]
    
  3. 定位/修改元素:

    列表名[索引] = 元素
    变量 = 列表名[索引]

    list01[-1]  # HTML
    

    变量 = 列表名[切片] # 赋值给变量的是切片所创建的新列表

    list01[:3]  # [100, 'JS', 'python']
    

    列表名[切片] = 容器 # 右侧必须是可迭代对象,左侧切片没有创建新列表

    # 遍历[10,20],将每个元素赋值给切片位置的元素
    list01[-1:] = [10,20]  # [100,"JS","python",True,10,20]
    list01[-2:] = "ok"  # [100,"JS","python",True,"o","k"]
    

    遍历列表:

    # 正向:
    for 变量名 in 列表名:
    	变量名就是元素
    # 反向:
    for 索引名 in range(len(列表名)-1,-1,-1):
    	列表名[索引名]就是元素
    
  4. 删除元素:

    列表名.remove(元素)
    del 列表名[索引或切片]

    # 根据元素移除
    list01.remove("JS")  # [100,"python",True,"o","k"]
    # -- 根据索引/切片删除
    del list01[0]  # ["python",True,"o","k"]
    del list01[-2:]  # ["python",True]
    

列表VS字符串

  1. 列表和字符串都是序列,元素之间有先后顺序关系
  2. 字符串是不可变的序列,列表是可变的序列
  3. 字符串中每个元素只能存储字符,而列表可以存储任意类型
  4. 列表和字符串都是可迭代对象

列表推导式

  1. 定义:使用简易方法,将可迭代对象转换为列表
  2. 语法:

变量 = [表达式 for 变量 in 可迭代对象]
变量 = [表达式 for 变量 in 可迭代对象 if 条件]

  1. 说明:如果if真值表达式的布尔值为False,则可迭代对象生成的数据将被丢弃

列表推导式嵌套

  1. 语法:
    变量 = [表达式 for 变量1 in 可迭代对象1 for 变量2 in可迭代对象2]
  2. 传统写法:
    result = []
    for r in ["a", "b", "c"]:
    	for c in ["A", "B", "C"]:
    		result.append(r + c)
    
  3. 推导式写法:
    result = [r + c for r in list01 for c in list02]
    

元组 tuple

由一系列变量组成的不可变序列容器。

基础操作

  1. 创建空元组:
    元组名 = ()
    元组名 = tuple()
    tuple01 = (1, 2, 3, 4, 5)
    list01 = [6, 7, 8, 9]
    # 预留空间 --> 按需分配
    tuple02 = tuple(list01)
    # 按需分配 --> 预留空间
    list02 = list(tuple01)
    
  2. 创建非空元组:
    元组名 = (20,)
    元组名 = (1, 2, 3)
    元组名 = 100,200,300
    元组名 = tuple(可迭代对象)
    # (元素)  -->  元素
    # (元素,) -->  元组
    tuple03 = (10,)
    
  3. 获取元素:
    变量 = 元组名[索引]
    变量 = 元组名[切片] # 赋值给变量的是切片所创建的新列表
    tuple04 = ("张三", "李四")
    name01, name02 = tuple04
    
  4. 遍历元组(同列表)

作用

  1. 元组与列表都可以存储一系列变量,由于列表会预留内存空间,所以可以增加元素
  2. 元组会按需分配内存,所以如果变量数量固定,建议使用元组,因为占用空间更小
  3. 应用:

变量交换的本质就是创建元组:x, y = (y, x)
格式化字符串的本质就是创建元祖:“姓名:%s, 年龄:%d” % (“tarena”, 15)

字典 dict

  1. 由一系列键值对组成的可变散列容器
  2. 散列:对键进行哈希运算,确定在内存中的存储位置,每条数据存储无先后顺序
  3. 键必须惟一且不可变(字符串/数字/元组),值没有限制

基础操作

  1. 创建字典:
    字典名 = {键1:值1,键2:值2}
    字典名 = dict (可迭代对象)

    dict01 = {}
    dict02 = dict()
    dict01 = {"张三": 180, "李四": 160, "王五": 170}
    # 其他可迭代对象(格式)  -->  字典
    dict02 = dict([("张三", 180), ("李四", 160)])
    # 字典 --> 列表(键)
    list01 = list(dict01)  # ["张三","李四","王五"]
    
  2. 添加/修改元素:
    语法:字典名[键] = 数据
    说明:

    键不存在,创建记录
    键存在,修改值

    # 添加(key不存在)
    dict01["赵六"] = 190  # {'张三': 180, '李四': 160, '王五': 170,'赵六': 190}
    # 修改(key存在)
    dict01["张三"] = 185  # {'张三': 185, '李四': 160, '王五': 170,'赵六': 190}
    
  3. 获取元素:变量 = 字典名[键] 键值存在返回value,不存在则报错

  4. 遍历字典:

    # 获取所有key
    for key in dict01:
    	print(key)
    # 获取所有value
    for value in dict01.values():
    	print(value)
    # 获取所有key--value
    for kv in dict01.items():# 遍历结果是元组
    	print(kv)
    for key,value in dict01.items():
        print(key)
        print(value)
    
  5. 删除元素:
    del 字典名[键]

字典推导式

  1. 定义:使用简易方法,将可迭代对象转换为字典
  2. 语法:

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

字典 VS 列表

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

集合 set

  1. 由一系列不重复的不可变类型变量(元组/数/字符串)组成的可变散列容器
  2. 相当于只有键没有值的字典(键是集合的数据)。

基础操作

  1. 创建空集合:
    集合名 = set()
    集合名 = {1, 2, 3}
    集合名 = set(可迭代对象)
    set01 = {"悟空", "唐僧"}
    # 创建空集合
    set02 = set()
    list01 = ["悟空", "唐僧", "悟空", "八戒"]
    set02 = set(list01)  # {'唐僧', '八戒', '悟空'}
    
  2. 添加元素:
    集合名.add(元素)
    set02.add("小白龙")  ## {'悟空', '唐僧', '沙僧', '八戒'}
    
  3. 删除元素:
    集合名.discard(元素)
    set02.discard("悟空")  # {'沙僧', '唐僧', '八戒'}
    

运算

  1. 交集&:返回共同元素。
    s1 = {1, 2, 3}
    s2 = {2, 3, 4}
    s3 = s1 & s2  # {2, 3}
    
  2. 并集:返回不重复元素
    s4 = s1 | s2 # {1, 2, 3, 4}
    
  3. 补集-:返回只属于其中之一的元素
    s1 - s2 # {1} 属于s1但不属于s2
    
  4. 补集^:返回不同的的元素
    s5 = s1 ^ s2 # {1, 4} 等同于(s1-s2 | s2-s1)
    
  5. 子集<:判断一个集合的所有元素是否完全在另一个集合中
  6. 超集>:判断一个集合是否具有另一个集合的所有元素
    s1 = {1, 2, 3}
    s2 = {2, 3}
    s2 < s1 # True
    s1 > s2 # True
    
  7. 相同或不同== !=:判断集合中的所有元素是否和另一个集合相同。
    s1 = {1, 2, 3}
    s2 = {3, 2, 1}
    s1 == s2 # True
    s1 != s2 # False
    
    子集或相同,超集或相同 <= >=

集合推导式

  1. 定义:使用简易方法,将可迭代对象转换为集合。
  2. 语法:

{表达式 for 变量 in 可迭代对象}
{表达式 for 变量 in 可迭代对象 if 条件}

固定集合 frozenset

不可变集合
固定集合可以作为字典的键,还可以作为集合的值。

基础操作

创建固定集合:frozenset(可迭代对象)

运算

等同于set

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值