高级变量类型
- 列表
- 元组
- 字典
- 字符串
Python 中数据类型分为数字型和非数字型变量
非数字型变量可进行如下操作:
- 都是一个序列
sequence
,也可以理解为容器 - 取值
[ ]
- 遍历
for in
- 计算长度、最大值最小值、比较、删除
- 链接
+
和重复*
- 切片
关键字、函数、方法的区别
- 关键字
- 关键字是 Python 内置的具有特殊意义的标识符
- 关键字不需要使用括号,函数和方法需要
- Python 中有 33 个关键字
- 函数
- 函数封装了独立功能,可以直接调用
- 函数需要死记硬背
- 方法
- 方法和函数类似,同样是封装了独立功能
- 对象.方法名(参数)
- 方法需要对象来调用,表示针对这个对象的操作
列表
List
是Python
中使用最频繁的,其他语言中通常叫数组- 用
[ ]
定义,数据间用,
分割 - 列表的索引从
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
使用场景
- 列表存储相同类型的数据
- 通过迭代遍历,在循环体内部对每一个元素执行相同的操作
Python 列表中可以存储不同类型的数据
元组
Tuple
与列表类似,不同之处在于元组的元素不能修改- 多个元素组成的序列
- 在 Python 开发中
,
有特殊的应用场景
- 用于存储一串信息,数据间用
,
分隔 - 元组用
()
定义,索引从0
开始 - 创建空元组:
empty_tuple = ()
- 当元组中只有一个元素时,需要在元素后加入
,
元组常用操作
- .index
- .count
循环遍历
for 循环内部使用的变量 in 元组:
code
- 在 Python 中,可以使用 for 遍历所有非数字类型变量:列表、元组、字典、字符串
- 在实际开发中,除非能够确认元组数据中的数据类型,否则针对元组的循环遍历需求并不是很多
应用场景
- 函数的参数和返回值,一个函数可以接收任意多个参数,或者一次返回多个数据
- 格式字符串,格式化字符串后的 () 本质就是一个元组
- 让列表不可被修改,保护数据安全
元组和列表转换
使用 list
函数可以把元组转换成列表
list(元组)
使用 tuple
函数可以把列表转换成元组
tuple(列表)
字典
dictionary
是除列表以外 Python 中最灵活的数据类型- 字典同样可以用来存储多个数据
- 通常用于描述一个物体的相关信息
和列表的区别
- 列表是有序的对象集合
- 字典是无序的对象集合
- 字典用
{}
定义 - 字典使用
键值
存储数据,键值对儿之间用,
隔开- 键
key
是索引 - 值
value
是数据 - 键和值之间使用
:
分隔 - 键必须是唯一的
- 键
- 值可以取任何数据类型,但键只能使用字符串、数字或元组
xiaoming = {"name": "小明",
"age": 18,
"gender": True,
"height": 1.75,
"weight": 75.5}
print(xiaoming)
使用
基本使用
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合并到字典,如果被合并的字典包含已存在的键值对,会覆盖原有的键值对
循环遍历
# k 是每一次循环中获取到的键值对的 key
for k in dict:
code
应用场景
- 使用多个键值对,存储描述一个物体的相关信息
- 将多个字典放在一个列表中,再进行遍历,在循环体内部针对每一个字典进行相同的处理
字符串
-
表示文本的数据类型
-
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
方法返回 -1index
方法会报错
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
在对字典操作时,判断的是字典的键in
和not in
被称为成员运算符
完整的 for 循环语法
for 变量 in 集合:
循环体代码
else:
没有通过 break 退出循环,循环结束后,会执行的代码
- 循环体内部使用
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)