高级变量类型

ChouCong ... 2021-01-25 编程
  • Python
大约 11 分钟


# 高级变量类型

  • 列表
  • 元组
  • 字典
  • 字符串

Python 中数据类型分为数字型非数字型变量

非数字型变量可进行如下操作:

  • 都是一个序列 sequence,也可以理解为容器
  • 取值 [ ]
  • 遍历 for in
  • 计算长度、最大值最小值、比较、删除
  • 链接 + 和重复 *
  • 切片

关键字、函数、方法的区别

  • 关键字
    • 关键字是 Python 内置的具有特殊意义的标识符
    • 关键字不需要使用括号,函数和方法需要
    • Python 中有 33 个关键字
  • 函数
    • 函数封装了独立功能,可以直接调用
    • 函数需要死记硬背
  • 方法
    • 方法和函数类似,同样是封装了独立功能
    • 对象.方法名(参数)
    • 方法需要对象调用,表示针对这个对象的操作

# 列表

  • ListPython 中使用最频繁的,其他语言中通常叫数组
  • [ ] 定义,数据间用 , 分割
  • 列表的索引从 0开始
    • 索引就是列表中的位置序号,又被称为下标

从列表取值超出索引范围会报错

  • 取值:变量 [索引]

# 列表常用方法

定义空的列表,如 name_list = []

输入 name_list. 按下 TAB 键,可以看到可用的方法

常用方法 用途
索引 .index 取值和索引
增加 .append 列表末尾增加数据
.insert 指定索引增加数据
.extend 把另一个列表完整内容追加都列表末尾
删除 .remove 删除列表指定的出现的第一个数据
.pop 默认删除列表最后一个元素
.clear 清空列表
统计 .count 计算列表某一元素出现的次数
排序 .sort 升序 / 降序
.reverse 逆序(反转)列表
  • 使用del 关键字同样可以删除列表中的元素
  • 本质是将变量从内存中删除
  • 如果使用 del 关键字将变量从内存中删除,后续代码不能使用这个变量
  • 使用 len 关键字可以计算列表总的元素个数

# 循环遍历

  • 遍历就是从头到尾依次从列表中获取数据
    • 在循环内部针对每一个元素,执行相同的操作
  • Python 中提供迭代遍历 iteration
  • 使用 for 就能实现迭代遍历
for 循环内部使用的变量 in 列表:
    code
1
2

# 使用场景

  • 列表存储相同类型的数据
  • 通过迭代遍历,在循环体内部对每一个元素执行相同的操作

提示

Python 列表中可以存储不同类型的数据

# 元组

  • Tuple 与列表类似,不同之处在于元组的元素不能修改
    • 多个元素组成的序列
    • 在 Python 开发中有特殊的应用场景
  • 用于存储一串信息,数据间用 ,分隔
  • 元组用 () 定义,索引从 0 开始
  • 创建空元组: empty_tuple = ()
  • 当元组中只有一个元素时,需要在元素后加入 ,

# 元组常用操作

  • .index
  • .count

# 循环遍历

for 循环内部使用的变量 in 元组:
    code
1
2

相关信息

  • 在 Python 中,可以使用 for 遍历所有非数字类型变量:列表、元组、字典、字符串
  • 在实际开发中,除非能够确认元组数据中的数据类型,否则针对元组的循环遍历需求并不是很多

# 应用场景

  • 函数的参数返回值,一个函数可以接收任意多个参数,或者一次返回多个数据
  • 格式字符串,格式化字符串后的 () 本质就是一个元组
  • 让列表不可被修改,保护数据安全

# 元组和列表转换

使用 list 函数可以把元组转换成列表

list(元组)
1

使用 tuple 函数可以把列表转换成元组

tuple(列表)
1

# 字典

  • dictionary 是除列表以外 Python 中最灵活的数据类型
  • 字典同样可以用来存储多个数据
    • 通常用于描述一个物体的相关信息

# 和列表的区别

  • 列表是有序的对象集合
  • 字典是无序的对象集合
  • 字典用 {} 定义
  • 字典使用 键值 存储数据,键值对儿之间用 , 隔开
    • key是索引
    • value 是数据
    • 键和值之间使用 : 分隔
    • 键必须是唯一的
  • 值可以取任何数据类型,但键只能使用字符串数字元组
xiaoming = {"name": "小明",
            "age": 18,
            "gender": True,
            "height": 1.75,
            "weight": 75.5}
print(xiaoming)
1
2
3
4
5
6

使用 print 函数输出顺序和定义顺序通常不一样

# 基本使用

dict.keys() # 所有 key 列表
dict.values() # 所有 value 列表
dict.items() # 所有(key, value)元组列表

dict[key] # 从字典中取值,key 不存在会报错
dict.get(key) # 可以从字典中取值,key 不存在会报错

del dict[key] # 删除指定键值对,key 不存在会报错
dict.pop(key) # 删除指定键值对,key 不存在会报错
dict.popitem() # 随机删除一个键值对
dict.cleat # 清空字典

dict[key] = value # 如果 key 存在修改数据,不存在新建键值对
dict.setdefault(key, value) # 如果 key 存在修改数据,不存在新建键值对
dict.update(dict2) # 将字典2合并到字典,如果被合并的字典包含已存在的键值对,会覆盖原有的键值对
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 循环遍历

# k 是每一次循环中获取到的键值对的 key
for k in dict:
    code
1
2
3

# 应用场景

  • 使用多个键值对,存储描述一个物体的相关信息
  • 将多个字典放在一个列表中,再进行遍历,在循环体内部针对每一个字典进行相同的处理

# 字符串

  • 表示文本的数据类型
  • Python 中可以用一对双引号或者一对单引号定义字符串

相关信息

  • 大多数编程语言使用双引号定义字符串
  • Python 中如果字符串内部需要使用双引号,定义字符串用单引号
  • 可以使用索引获得一个字符串中中指定位置的字符,索引从 0 开始
  • 也可以使用 for 循环遍历字符串中每一个字符

# 常用操作

  • len 函数
  • .count 方法
  • .index 方法

# 字符串方法

# 判断类型

方法 说明
string.isspace() 如果 string 中只包含空格,返回 True
string.isalnum() 如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True
string.isalpha() 如果 string 至少有一个字符并且所有字符都是字母则返回 True
string.isdecimal() 如果 string 只包含数字则返回 True,全角数字
string.isdigit() 如果 string 只包含数字则返回 True,全角数字、(1)、u00b2 (unicode 字符)
string.isnumeric() 如果 string 只包含数字则返回 True,全角数字、汉字数字
string.istitle() 如果 string 是标题化的 (每个标题的首字母大写) 则返回 True
string.islower() 如果 string 中包含至少一个区分大小写的字符,并且所有这些 (区分大小写的) 字符都是小写,则返回 True
string.isupper() 如果 string 中包含至少一个区分大小写的字符,并且所有这些 (区分大小写的) 字符都是大写,则返回 True
  • decimal digit numeric 三个方法中
    • decimal 方法只包含数字
    • digit 还可包含 unicode 字符,如带括号的 1 (1)
    • numeric 方法还会包含中文数字,如:一
    • 一般使用 decimal 方法

# 查找和替换

方法 说明
string.startswith(str) 检查字符串是否以 str 开头,是则返回 True
string.endswith(str) 检查字符串是否以 str 结束,是则返回 True
string.find(str,
start=0,
end=len(string))
检查 str 是否包含在 string 中,如果 start 和 end 指定范围,则检查是否包含在指定范围,如果是返回开始的索引值,否则返回 -1
string.rfind(str,
start=0,
end=len(string))
类似于 find 函数,不过是从右边查找
string.index(str,
start=0,
end=len(string))
跟 find () 方法类似,只不过如果 str 不在 string 会报错
string.rindex(str,
start=0,
end=len(string))
类似于 index (),不过是从右边开始
string.replace(old_str,
new_str,
num=string.count(old))
把 string 中的 old_str 替换成 new_str,如果 num 指定,则替换不超过 num 次
  • find 方法和 index 方法都可以查找指定字符串是否包含在字符串中,如果指定字符串不存在
    • find 方法返回 -1
    • index 方法会报错
  • replace 方法执行完成后会返回新的字符串,但不会修改原有字符串

# 大小写转换

方法 说明
string.capitalize() 把字符串的第一个字符大写
string.title() 把字符串的每个单词首字母大写
string.lower() 转换 string 中所有大写字符为小写
string.upper() 转换 string 中所有小写字母为大写
string.swapcase() 翻转 string 中的大小写

# 文本对齐

方法 说明
string.ljust(width) 返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串
string.rjust(width) 返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串
string.center(width) 返回一个原字符居中,并使用空格填充至长度 width 的新字符串

# 去除空白字符

方法 说明
string.lstrip() 截掉 string 左边(开始)的空白字符
string.rstrip() 截掉 string 右边(末尾)的空白字符
string.strip() 截掉 string 左右两边的空白字符

# 拆分和连接

方法 说明
string.partition(str) 把字符串 string 分成一个 3 元素的元组(str 前面,str str 后面)
string.rpartition(str) 类似于 partition () 方法,不过是从右边开始查找
string.split(str="", num) 以 str 为分隔符拆分 string ,如果 num 有指定值,则仅分隔 num+1 个子字符串,str 默认包含 tnr 和空格
string.splitlines() 按照行 (r, n, rn) 分隔,返回一个包含各行作为元素的列表
string.join(seq) 以 string 作为分隔符,将 seq 中所有元素(的字符串表示)合并作为一个新的字符串

# 公共方法

# Python 内置函数

函数 描述 备注
len(item) 计算容器中元素个数
del(item) 删除变量 del 有两种方式
max(item) 返回容器中元素的最大值 如果是字典,只针对 key 比较
min(item) 返回容器中元素的最小值 如果是字典,只针对 key 比较
cmp(item1, item2) 比较两个值,-1 小于 / 0 相等 / 1 大于 Python 3.x 取消了 cmp 函数
  • 字符串比较符合以下规则:"0"<"A"<"a"
  • 两个字典不能比较大小

# 切片

  • 字符串[开始索引: 结束索引: 步长]
  • 切片 (slice) 方法适用于字符串列表元组
    • 切片使用索引值限定范围,从一个大的字符串中切出小的字符串
    • 列表和元组是有序的集合,能通过索引值获取对应数据
    • 字典是无序集合,通过键值对保存数据
  • 指定的区间属于左闭右开
    • [开始索引,结束索引)
    • 从起始开始,到结束位的前一位
  • 从头开始,开始索引数字可以省略,冒号不能省略
  • 到末尾结束,结束索引数字可以省略,冒号不能省略
  • 步长默认为 1 ,如果连续切片,数字和冒号都可以省略

# 运算符

运算符 Python 表达式 结果 描述 支持的数据类型
+ [1, 2] + [3, 4] [1, 2, 3, 4] 合并 字符串、列表、元组
* ["Hi!"] * 4 ['Hi!', 'Hi!', 'Hi!', 'Hi!'] 重复 字符串、列表、元组
in 3 in (1, 2, 3) True 元素是否存在 字符串、列表、元组、字典
not in 4 not in (1, 2, 3) True 元素是否不存在 字符串、列表、元组、字典
> >= == < <= (1, 2, 3) < (2, 2, 3) True 元素比较 字符串、列表、元组
  • in 在对字典操作时,判断的是字典的
  • innot in 被称为成员运算符

# 完整的 for 循环语法

for 变量 in 集合:
    循环体代码
else:
    没有通过 break 退出循环,循环结束后,会执行的代码
1
2
3
4
  • 循环体内部使用 break 关键字 else 以下的代码不会被执行

# 应用场景

  • 迭代遍历嵌套数据类型时,例如,一个列表包含多个字典
  • 需求:判断某一个字典中是否存在指定的值
    • 如果存在,提示并且退出循环
    • 如果不存在,循环整体结束后,得到统一的提示
students = [
    {"name": "阿土"},
    {"name": "小美"},
]

# 在学员列表中搜索指定名字

find_name = "张三"
for stu_dict in students:
    print(stu_dict)
    if stu_dict["name"] == find_name:
        print("找到了 %s" % find_name)
        break
else:
    print("没有找到%s" % find_name)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15