11 高级变量类型
高级变量类型
学习内容
- 列表
- 元组
- 字典
- 字符串
- 公共方法
- 变量高级
预备知识
-
Python中数据类型可以分为数字型和非数字型
-
数字型
- 整型( int )
- 浮点型( float )
- 布尔型( bool)
- 真True(非0 数)—―非零即真
- 假False 0
- 复数型(complex )
- 主要用于科学计算,例如:平面场问题、波动问题、电感电容等问题
-
非数字型
- 字符
- 列表
- 元组
- 字典
-
在Python中,所有非数字型变量都支持以下特点:
- 都是一个序列
sequence,也可以理解为容器 - 取值
[] - 遍历
for in - 计算长度、最大/最小值、比较、删除
- 链接
+和重复* - 切片
- 都是一个序列
01.列表
1.1 列表的定义
List(列表)是Python中使用最频繁的数据类型,在其他语言中通常叫做数组- 专门用于存储一串信息
- 列表用
[]定义,数据之间使用,分隔 - 列表的索引从
0开始- 索引就是数据在列表中的位置编号,索引又可以被称为下标
注意:从列表中取值时,如果超出索引范围,程序会报错
name_list = ["zhangsan","lisi","wangwu"]
# 拿到数据 中括号!!!
# 中括号里面的数据可以从0—2
name_list[0]
1.2 列表的常用操作
- 在
ipython3中定义一个列表,例如:name_list=[] - 输入
name_list.按下TAB键,ipython会提示列表能够使用的方法如下:
In [1]: name_list.
name_list.append name_list.count name_list.insert name_list.reverse
name_list.clear name_list.extend name_list.pop name_list.sort
name_list.copy name_list.index name_list.remove

常用命令
name_list = ["zhangsan", "lisi", "wangwu"]
# 1.取值和取索引
# list index out of range ;列表索引超出范围
print(name_list[2])
# 知道数据的内容,想确定数据在列表中的位置
# 使用index方法需要注意,如果传递的数据不在列表中,程序会报错!
print(name_list.index("lisi"))
# 2.修改
name_list[1] = "李四"
# list assignment index out of range
# 列表指定的索引超出范围,程序会报错
# name_list[3] = "王小二"
# 3.增加
# append 方法可以向列表的末尾追加数据
name_list.append("王小二")
# insert 方法可以在列表指定索引位置插入数据
name_list.insert(1, "小美眉")
# extend 把另外一个列表的完整内容,追加到列表末尾
temp_list = ["孙悟空", "朱二哥", "沙师弟"]
name_list.extend(temp_list)
# 4.删除
# remove 方法可以从列表中删除制定的数据
name_list.remove("wangwu")
# pop方法默认可以把列表最后一个元素删除
name_list.pop()
# pop方法可以指定要删除元素的索引
name_list.pop(3)
# clear 方法可以清空列表
name_list.clear()
print(name_list)
del方法删除
name_list = ["zhangsan", "lisi", "wangwu"]
# 使用del 关键字(delete)删除列表元素
del name_list[1]
# del关键字本质上是用来将一个变量从内存中删除的
# 提示:在日常开发中,要从列表删除数据.建议使用列表提供的方法
name = "小明"
del name
# 注意:如果使用del关键字将变量从内存中删除
# 后续的代码就不能再使用这个变量了
print(name_list)
列表的数据统计
name_list = ["张三", "李四", "王五","王小二","张三"]
# len(length 长度) 函数 可以统计列表中元素的总数
list_len=len(name_list)
print("列表中包含 %d 个元素" % list_len)
# count 方法可以统计列表中某一个数据出现的次数
count=name_list.count("张三")
print("张三出现 %d 次" % count)
# 从列表中删除数据
# remove会删除列表中第一次出现的数据,如果数据不存在,程序会报错
name_list.remove("张三")
print(name_list)
列表的排序和翻转
name_list = ["zhangsan", "lisi", "wangwu", "wangxiaoer"]
num_list = [6, 8, 4, 1, 10]
# 升 序
name_list.sort()
num_list.sort()
# 降 序
name_list.sort(reverse=True)
num_list.sort(reverse=True)
# 逆序
name_list.reverse()
num_list.reverse()
print(name_list)
print(num_list)
关键字、函数和方法(科普)
- 关键字是Python内置的、具有特殊意义的标识符
In [1]: import keyword
In [2]: print(keyword.kwlist)
In [3]: print(len(keyword.kwlist))
关键字后面不需要使用括号
-
函数封装了独立功能,可以直接调用
函数名(参数)
函数需要死记硬背
- 方法和函数类似。同样是封装了独立的功能
- 方法需要通过对象来调用,表示针对这个对象要做的操作
对象.方法名(参数)
在变量后面输入
.,然后选择针对这个变量要执行的操作,记忆起来比函数要简单很多
1.3 循环遍历
- 遍历就是从头到尾依次从列表中获取数据
- 在循环体内部针对每一个元素,执行相同的操作
- 在Python中为了提高列表的遍历效率,专门提供的迭代 iteration遍历
- 使用 for就能够实现迭代遍历
#fo r循环内部使用的变量 in 列表
for name in name_list:
#循环内部针对列表元素进行操作
print(name)

应用场景
- 尽管
Python的列表中可以存储不同类型的数据 - 但是在开发中,更多的应用场景是
- 1.列表存储相同类型的数据
- 2.通过迭代遍历,在循环体内部,针对列表中的每一项元素,执行相同的操作
02.元组
2.1 元组的定义
Tuple(元组)与列表类似,不同之处在于元组的元素不能修改。- 元组表示多个元素组成的序列
- 元组在Python开发中,有特定的应用场景
- 用于存储一串信息,数据之间使用
,分隔 - 元组用
()定义 - 元组的索引从
0开始- 索引就是数据在元组中的位置编号
info_tuple=("zhangsan",18,1.75)
索引时,不管是元组还是列表均用
[]
创建空元组
info_tuple=()
元组中只包含一个元素时,需要在元素后面添加逗号
info_tuple=(50,)

2.2 元组常用操作
- 在ipython3中定义一个元组。例如:
info = () - 输入
info = ()按下 TAB键,ipython会提示元组能够使用的函数如下:
info.count info.index
2.3 循环遍历
- 取值就是从元组中获取存储在指定位置的数据
- 遍历就是从头到尾依次从元组中获取数据
#fo 循环内部使用的变量 in 元组
for name in info:
#循环内部针对元组元素进行操作
print(info)
- 在Python中,可以使用for循环遍历所有非数字型类型的变量:列表、元组、字典以及字符串
- 提示:在实际开发中,除非能够确认元组中的数据类型,否则针对元组的循环遍历需求并不是很多
info_tuple = ("zhangsan", 18, 1.75)
for my_info in info_tuple:
# 使用格式字符串拼接my_info 这个变量不方便!
# #因为元组中通常保存的数据类型是不同的!
print(my_info)
2.4 应用场景
- 尽管可以使用 for in 遍历元组
- 但是在开发中,更多的应用场景是:
- 函数的参数和返回值,一个函数可以接收任意多个参数,或者一次返回多个数据
- 有关函数的参数和返回值,在后续函数高级给大家介绍
- 格式字符串,格式化字符串后面的
()本质上就是一个元组。 - 让列表不可以被修改。以保护数据安全
- 函数的参数和返回值,一个函数可以接收任意多个参数,或者一次返回多个数据
info_tuple=("小明",18,1.75)
# 格式字符串,格式化字符串后面的`()`本质上就是一个元组。
print("%s 年龄是 %d 身高是 %.2f" % ("小明",18,1.75))
print("%s 年龄是 %d 身高是 %.2f" % info_tuple)
# 可以用格式字符串,拼接生一个新的字符串
info_str = "%s 年龄是 %d 身高是 %.2f" % info_tuple
print(info_str)
元组和列表之间的转换
-
使用
list函数可以把元组转换成列表list(元组) -
使用
tuple函数可以把列表转换成元组tuple(列表)
03.字典
3.1 字典的定义
dictionary(字典)是除列表以外Python之中最灵活的数据类型- 字典同样可以用来存储多个数据
- 通常用于存储描述一个
物体的相关信息
- 通常用于存储描述一个
- 和列表的区别
- 列表是有序的对象集合。
- 字典是无序的对象集合
- 字典用
{}定义 - 字典使用键值对存储数据,键值对之间使用
,分隔。- 键key是索引
- 值value是数据
- 键和值之间使用
:分隔。 - 键必须是唯一的
- 值可以取任何数据类型,但键只能使用字符串、数字或元组

xiaoming = {"name": "小明",
"age":18,
"gender":True,
"height":1.75,
"weight":75.5}
print(xiaoming)
3.2 字典常用操作
- 在
ipython3中定义一个字典,例如:xiaoming = {} - 输入
xiaoming.按下TAB键,ipython会提示字典能够使用的函数如下:

字典的基本使用
xiaoming_dict = {"name": "小明"}
# 1.取值(还是中括号[])
# 在取值的时候,如果指定的key不存在,程序会报错!
print(xiaoming_dict["name"])
# 2.增加/修改
# 如果key不存在,会新增键值对
# 如果key存在,会修改已经存在的键值对
xiaoming_dict["age"] = 18
xiaoming_dict["name"] = "小小明"
# 3.删除
# 使用pop进行删除,无remove
# 在删除指定键值对的时候,如果指定的key不存在,程序会报错!
xiaoming_dict.pop("name")
print(xiaoming_dict)
字典的其他操作
xiaoming_dict = {"name": "小明",
"age": 18}
# 1.统计键值对爰量
print(len(xiaoming_dict))
# 2.合并字典
temp_dict = {"height": 1.75}
xiaoming_dict.update(temp_dict)
# 注意:如果被合筹的字典中包含已经存在的键值对,会覆盖原有的键值对
# 3.清空字典
xiaoming_dict.clear()
print(xiaoming_dict)
3.3 循环遍历
xiaoming_dict={"name":"小明",
"qq":"123465",
"phone":"10086"}
#迭代遍历字典
#变量k是每一次循环中,获取到的键值对的key
for k in xiaoming_dict:
print("%s - %s" % (k,xiaoming_dict[k]))
3.4 应用场景
- 尽管可以使用 for in遍历字典
- 但是在开发中。更多的应用场景是:
- 使用多个键值对,存储描述一个
物体的相关信息--描述更复杂的数据信息 - 将多个字典放在一个列表中,再进行遍历,在循环体内部针对每一个字典进行相同的处理
- 使用多个键值对,存储描述一个
card_list=[
{"name":"小明",
"qq":"123465",
"phone":"10086"},
{"name":"小",
"qq":"123465dd",
"phone":"10086dfdfds"}
]
for card_info in card_list:
print(card_info)
04.字符串
4.1 字符串定义
- 字符串 就是一串字符,是编程语言语言中表示文本的数据类型
- 在Python中可以使用一对双引号
“或者**一对单引号 **‘定义一个符串- 虽然可以使用
\"或者\'做字符串的转义,但是在实际开发中:- 如果字符串内部需要使用
“,可以使用‘定义字符串 - 如果字符串内部需要使用
’,可以使用”定义字符串
- 如果字符串内部需要使用
- 虽然可以使用
- 可以使用索引获取一个字符串中指定位置的字符,索引计数从0开始
- 也可以使用
for循环遍历字符串中每一个字符
str2='我的外号是"大西瓜"'
print(str1[6])
for char in str2:
print(char)
大多数编程语言都是用
“来定义字符串

4.2 字符串的常用操作
hello_str = "hello hello"
# 1.统计字符串长度
print(len(hello_str))
# 2.统计某一个小(子)字符串出现的次数
print(hello_str.count("llo"))
print(hello_str.count("abc"))
# 3.某一个子字符串出现的位置
print(hello_str.index("llo"))
# 注意:如果使用index方法传递的子字符串不存在,程序会报错!|
print(hello_str.index("abc"))
查询字符串的方法的个数:
- 在
ipython3中定义一个字符串,例如 :hello_str="" - 输入
hello_str.按下Tab键,ipython会提示字符串能够使用的方法如下:
hello_str.capitalize hello_str.isidentifier hello_str.rindex
hello_str.casefold hello_str.islower hello_str.rjust
hello_str.center hello_str.isnumeric hello_str.rpartition
hello_str.count hello_str.isprintable hello_str.rsplit
hello_str.encode hello_str.isspace hello_str.rstrip
hello_str.endswith hello_str.istitle hello_str.split
hello_str.expandtabs hello_str.isupper hello_str.splitlines
hello_str.find hello_str.join hello_str.startswith
hello_str.format hello_str.ljust hello_str.strip
hello_str.format_map hello_str.lower hello_str.swapcase
hello_str.index hello_str.lstrip hello_str.title
hello_str.isalnum hello_str.maketrans hello_str.translate
hello_str.isalpha hello_str.partition hello_str.upper
hello_str.isdecimal hello_str.replace hello_str.zfill
hello_str.isdigit hello_str.rfind
提示:正是因为python内置提供的方法足够多,才使得在开发时,能够针对字符串进行更加灵活的操作!应对更多的开发需求!
1) 判断类型-9

# 1.判断空白字符
space_str = " \t\n\r"
# \t\n\r均属于空白字符
print(space_str.isspace())
# 1.判断空白字符
space_str = " \t\n\r"
# \t\n\r均属于空白字符
print(space_str.isspace())
# 2.判断字符串中是否只包含数字
# 1>都不能判断小数
# num_str="1.1" False False False
# 2>unicode 字符串
# num_str = "\u00b2" False True True
# 3>中文数字
num_str="一千零一夜" # False False True
print(num_str)
print(num_str.isdecimal())# 开发中尽量使用这个!!
print(num_str.isdigit())
print(num_str.isnumeric())
2)查找和替换-7

3)大小写转换-5

4)文本对齐-3

5)去除空白字符-3

6)拆分和连接 -5

4.3 字符串的切片
- 切片的方法适用于字符串、列表、元组
- 切片使用索引值来限定范围,从一个大的字符串中切出小的字符串
- 列表和元组都是有序的集合,都能够通过索引值获取到对应的数据
- 字典是一个无序的集合,是使用键值对保存数据

字符串[开始索引:结束索引:步长]
注意:
- 指定的区间属于左闭右开型
[开始索引,结束索引)- 从起始位开始,到结束位前一位结束(不包含结束位本身)
- 从头开始,开始索引数字可以省略,冒号不能省略
- 到末尾结束,结束索引数字可以省略,冒号不能省略
- 步长默认为1,如果连续切片,数字和冒号都可以省略
索引的顺序和倒序
- 在Python中不仅支持顺序索引,同时还支持倒序索
- 引所谓倒序索引就是从右向左计算索引
- 最右边的索引值是-1,依次递减
面试题:字符串逆序
>>> num_str="0123456789"num_str="0123456789"
>>> num_str[-1::-1]
'9876543210'
05.公共方法
5.1 Pyhton内置函数
Python包含了以下内置函数

注意:
-
字符串比较符合以下规则:”0“<"A"<"a"
-
内置函数是不用import导入
## del作为关键字删除
>>> a=[1,2,3]
>>> del a[1]
>>> a
[1, 3]
## del作为函数删除
>>> del(a[1])
>>> a
[1]
- 可以用比较运算符来判断大小,但是字典不能比较大小
5.2 切片

- 切片使用索引值来限定范围,从一个大的宁符串中切出小的宁符串
- 列表和元组都是有序的集合,都能够通过索引值获取到对应的数据
- 字典是一个无序的集合,是使用键值对保存数据
5.3 运算符

注意:
-
字典中的键值对的”key“都是唯一的,不可以用
* -
+号是产生一个新的数据,而extend是将原来的数据进行扩展和修改不返回新的 -
append与extend的区别
- append会将元素打散一个个插入
- extend是将其看成一个整体直接全部插入

- in在对字典操作时,判断的是字典的键(key)
- in和not in被称为成员运算符
5.4 完整的for循环
- 在python中完整的for循环的语法如下:
for 变量 in 集合:
循环体代码
else:
没有通过break退出循环,循环结束后,会执行的代码
应用场景
- 在迭代遍历嵌套的数据类型时,例如一个列表包含了多个字典
- 需求:要判断某一个字典中是否存在指定的值
- 如果存在,提示并且退出循环
- 如果不存在,在循环整体结束后,希望得到一个统一的提示
students =[
{"name":"阿土"},
{"name":"小美"}
]
find_name="张三"
for stu_dict in students:
print(stu_dict)
if stu_dict["name"]==find_name:
print("找到了 %s" % stu_dict["name"])
break
else:
print("抱歉没有找到 %s" % find_name)
print("循环结束")
输出结果:

错误示范,将else改到if下:
students =[
{"name":"阿土"},
{"name":"小美"}
]
find_name="张三"
for stu_dict in students:
print(stu_dict)
if stu_dict["name"]==find_name:
print("找到了 %s" % stu_dict["name"])
break
else:
print("抱歉没有找到 %s" % find_name)
print("循环结束")
输出结果:

不能够达到我们的要求!