容器类型

数学运算符

  • + : 用于拼接两个容器
  • += : 用原容器与右侧容器拼接,并重新绑定变量
  • * : 重复生成容器元素
  • *= : 用原容器生成重复元素, 并重新绑定变量
  • <,<=,>,>=,==,!= : 依次比较两个容器中元素,一但不同则返回比较结果
# 1. 拼接2个容器元素
name = "悟空"
name += "八戒"
print(name) # 悟空八戒
# 2. 容器元素重复
name = "唐僧"
name *= 2
print(name) # 唐僧唐僧
# 3. 比较运算:依次比较两个容器中元素,一但不同则返回比较结果。
print("悟空" > "唐僧")

成员运算符

语法

  • 数据 in 序列
  • 数据 not in 序列
# 成员运算
# 如果在指定的序列中找到值,返回bool类型
# True
print("悟空" in "我是齐天大圣孙悟空")
print("圣孙" in "我是齐天大圣孙悟空")
# False
print("齐圣" in "我是齐天大圣孙悟空")
print("圣大" in "我是齐天大圣孙悟空")

索引index

定位单个容器元素

# 语法:容器[整数]
# 正向索引从0开始,第二个索引为1,最后一个为len(s)-1
# 反向索引从-1开始,-1代表最后一个,-2代表倒数第二个,以此类推,第一个是-len(s)

message = "我是花果山齐天大圣"
print(message[2]) # 花
print(message[-2]) # 大
print(len(message)) # 9
# 注意:索引不能越界IndexError
# print(message[99])
# print(message[-99])

切片slice

定位多个容器元素

# 容器[开始索引:结束索引:步长]
# 结束索引不包含该位置元素
# 步长是切片每次获取完当前元素后移动的偏移量
# 开始、结束和步长都可以省略

message = "我是花果山齐天大圣"
print(message[2:5:1]) # 花果山
print(message[1: 5]) # 是花果山
print(message[2:-4]) # 花果山
print(message[:-4]) # 我是花果山
print(message[:]) # 我是花果山齐天大圣
print(message[-3:]) # 天大圣
print(message[:2]) # 我是
print(message[-2:]) # 大圣
print(message[-2: 3:-1]) # 大天齐山
print(message[1: 1]) # 空
print(message[2: 5:-1]) # 空
# 特殊:翻转
print(message[::-1]) # 圣大天齐山果花是我

内建函数

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

字符串 str

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

  • 字节byte:计算机最小存储单位,等于8位bit.
  • 字符:单个的数字,文字与符号。
  • 字符集(码表):存储字符与二进制序列的对应关系。
  • 编码:将字符转换为对应的二进制序列的过程。
  • 解码:将二进制序列转换为对应的字符的过程。
  • https://www.runoob.com/python3/python3-string.html

编码方式

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

相关函数

  • ord() : 返回该字符串的Unicode码。
  • chr() : 返回该整数对应的字符串。
  • isspace() : 如果字符串中只包含空白,则返回True,否则返回False.
  • startswith(substr, beg=0,end=len(string)) : 检查字符串是否是以指定子字符串substr开头,是则返回True,否则返回False。如果begend指定值,则在指定范围内检查。
  • endswith(suffix, beg=0, end=len(string)) : 检查字符串是否以obj结束,如果beg或者end指定则检查指定的范围内是否以obj结束,如果是,返回 True,否则返回 False.
  • find(str, beg=0 end=len(string)) : 检测str是否包含在字符串中,如果指定范围begend,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回-1
  • rfind(str, beg=0,end=len(string)) : 类似于find()函数,不过是从右边开始查找.
  • count(str, beg= 0,end=len(string)) : 返回strstring里面出现的次数,如果beg或者end指定则返回指定范围内str出现的次数
  • replace(old, new [, max]) : 把将字符串中的str1替换成str2,如果max指定,则替换不超过max次。
  • lstrip() : 截掉字符串左边的空格或指定字符。
  • rstrip() : 删除字符串字符串末尾的空格.
  • strip([chars]) : 在字符串上执行lstrip()rstrip()
  • lower() : 转换字符串中所有大写字符为小写.
  • upper() : 转换字符串中的小写字母为大写
  • swapcase() : 将字符串中大写转换为小写,小写转换为大写
  • center(width, fillchar) : 返回一个指定的宽度width居中的字符串,fillchar为填充的字符,默认为空格。
  • zfill (width) : 返回长度为width的字符串,原字符串右对齐,前面填充 0
  • ljust(width[, fillchar]) : 返回一个原字符串左对齐,并使用fillchar填充至长度width的新字符串,fillchar 默认为空格。
# 文字 --> 数字
number = ord("我")
print(number) # 25105
# 数字 --> 文字
char = chr(25105)
print(char) # 我

字面值

单引和双引号的区别

  • 单引号内的双引号不算结束符
  • 双引号内的单引号不算结束符

三引号作用

  • 换行会自动转换为换行符\n
  • 三引号内可以包含单引号和双引号
  • 作为文档字符串

转义字符

  • 改变字符的原始含义
\' \" \n \\ \t
  • 原始字符串:取消转义
a = r"C:\newfile\test.py"

字符串格式化

生成一定格式的字符串

# 语法:字符串%(变量)

print("我的名字是%s,年龄是%s" % (name))

类型码

# %s 字符串 %d整数 %f 浮点数

print("%.2d:%.2d"%(2,3)) # 02:03
print("治愈比例为%d%%" % 5) # 治愈比例为5%
print("价格%.2f元" % (5 / 3)) # 价格1.67元

列表 list

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

基础操作

# 创建列表

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

# 添加元素

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

# 定位元素

列表名[索引] = 元素
变量 = 列表名[索引]
变量 = 列表名[切片] # 赋值给变量的是切片所创建的新列表
列表名[切片] = 容器 # 右侧必须是可迭代对象,左侧切片没有创建新列表

# 正向遍历

for 变量名 in 列表名:
    变量名就是元素

# 反向遍历

for 索引名 in range(len(列表名)-1,-1,-1):
    列表名[索引名]就是元素

# 删除元素

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

代码演示

# 1. 创建
# 写法1:列表名 = [数据1,数据2]
# 姓名列表
list_names = ["悟空", "唐三藏", "八戒", "沙僧"]
# 年龄列表
list_ages = [26, 23, 25, 16]
# 写法2:列表名 = list(可迭代对象)
list_name = list("孙悟空")
print(list_name) # ['孙', '悟', '空']
# 2. 添加
# -- 追加:列表名.append(数据)
list_names.append("小白龙")
# -- 插入: 列表名.insert(索引,数据)
list_names.insert(2, "哪吒")
print(list_names) # ['悟空', '唐三藏', '哪吒', '八戒', '沙僧', '小白龙']
# 3. 定位
# -- 索引:容器名[整数]
# -- 读取
element = list_names[-1]
print(element) # 小白龙
# -- 修改
list_names[-1] = "二郎神"
print(list_names) # ['悟空', '唐三藏', '哪吒', '八戒', '沙僧', '二郎神']
# -- 切片:容器名[整数:整数:整数]
# -- 通过切片读取,创建新列表(拷贝)
names = list_names[:3]
print(names) # ['悟空', '唐三藏', '哪吒']
# -- 通过切片修改,遍历右侧数据,依次存入左侧.
list_names[:3] = ["空空", "唐唐", "猪猪"]
# list_names[:3] = 100 # 因为100不能被for
list_names[:3] = "孙悟空"
print(list_names) # ['孙', '悟', '空', '八戒', '沙僧', '二郎神']
# 4. 遍历:操作容器每个元素
# -- 方式1: for 元素 in 容器
# 适用性:从头到尾依次读取
for name in list_names:
print(name)
# -- 方式2:for 索引 in range(开始,结束,间隔):
# 适用性:非从头到尾依次读取
# len(list_names) - 1 是 最大索引(总数-1)
# -1 索引可以去到0
# -1 倒序
# 功能:倒序
for i in range(len(list_names) - 1, -1, -1):
print(list_names[i])
# 功能:修改
for i in range(len(list_names)):
# 文字长度是3的修改为None
if len(list_names[i]) == 3:
list_names[i] = None
print(list_names) # ['孙', '悟', '空', '八戒', '沙僧', None]
# 5. 删除
# -- 方式1:根据元素删除 列表名.remove(元素)
list_names.remove("八戒")
# -- 方式2:根据定位删除 del 容器名[索引或者切片]
del list_names[0]
del list_names[-2:]
print(list_names) # ['悟', '空']