python入门(6)高级变量
一、变量
- python数据类型:数字型和非数字型
- 数字型:整型(int)、浮点型(float)、布尔型(bool)、复数型(complex)
- 非数字型:字符串、列表、元组、字典
- 非数字型变量都支持以下特点:
都是一个序列sequence,也可以理解为容器
取值[ ]
遍历 for in
计算长度、最大值/最小值、比较、删除
链接+ 和重复 *
切片
二、列表
1. 列表的定义
- List(列表)是python中使用最频繁的数据类型,在其他语言中通常叫做数组,专门用于储存一串信息。
- 列表用 [ ] 定义,数据之间使用,分隔
name_list = ["zhangsan","lisi","wangwu"]
- 定义空列表: name_list = [ ]
- 列表的索引从0开始,索引就是数据在列表中的位置编号,索引又可以被称为下标,从列表中取值时,如果超出索引范围,程序会报错
2.列表访问
-通过列表名[ 下标 ]访问列表中某个值,如 name_list[0]
`
3.列表常用操作
- 定义一个列表,例如:name_list = [ ]
- 打印name_list. ,当输入.后,pycharm会自动提示,然后选择自己合适的方法就可以了。
- 取值和取索引
name_list = ["zhangsan","lisi","wangwu"]
# list index out of range ---列表索引超出范围
print(name_list[1])
#知道数据的内容,想确定数据在列表中的位置
#使用index方法需要注意,如果传递的数据不在列表中,程序会报错
print(name_list.index("lisi"))
- 修改
name_list = ["zhangsan","lisi","wangwu"]
# list assignment index out of range---列表指定的索引超出范围
name_list[1] = "李四"
- 增加
append方法可以向列表的末尾添加数据
insert方法可以在列表的指定索引位置插入数据
extend方法可以把另外一个列表的完整内容追加到当前列表末尾
name_list = ["zhangsan","lisi","wangwu"]
#append方法可以向列表的末尾添加数据
name_list.append("wangxiaoer")
#insert方法可以在列表的指定索引位置插入数据
name_list.insert(1,"xiaotongxue")
#extend方法可以把另外一个列表的完整内容追加到当前列表末尾
temp_list = ["唐三藏","孙悟空"]
name_list.extend(temp_list)
- 删除
remove方法可以从列表中删除指定的数据
pop方法默认可以把列表中最后一个元素删除
pop方法可以指定要删除元素的索引
name_list = ["zhangsan","lisi","wangwu"]
# 4.删除
#remove方法可以从列表中删除指定的数据,删除列表中第一次出现的数据
name_list.remove("wangwu")
#pop方法默认可以把列表中最后一个元素删除
name_list.pop()
#pop方法可以指定要删除元素的索引
name_list.pop("1")
#clear方法可以清空列表
name_list.clear()
print(name_list)
- 使用del关键字删除(不推荐,了解)
name_list = ["zhangsan","lisi","wangwu"]
#使用del关键字(delete)删除列表元素
#在日常开发中,要从列表中删除数据,建议使用列表提供的方法
del name_list[1]
# del关键字本质上是用来将一个变量从内存中删除的
#注意:如果使用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)
- 排序–升序
name_list = ["张三","李四","王五","张三"]
num_list = [1,4,5,7,3]
#升序
name_list.sort()
num_list.sort()
print(name_list)
print(num_list)
- 排序–降序
name_list = ["张三","李四","王五","张三"]
num_list = [1,4,5,7,3]
#降序
name_list.sort(reverse=True)
num_list.sort(reverse=True)
print(name_list)
print(num_list)
- 逆序(反转)
name_list = ["张三","李四","王五","张三"]
num_list = [1,4,5,7,3]
#逆序(反转)
name_list.reverse()
num_list.reverse()
print(name_list)
print(num_list)
- 关键字、函数、方法
关键字:是python内置的、具有特殊意义的标识符
import keyword
print(keyword.kwlist)
print(len(keyword.kwlist))
函数:封装了独立功能,需要知道函数名
方法:封装了独立功能,需要通过对象来调用,表示针对这个对象要做的操作
对象.方法名(参数)
对象后面输入.(点),然后选择针对这个变量要执行的操作,记忆起来比函数要简单的多。
- 循环遍历
遍历就是从头到尾依次从列表中获取数据,在循环体内部针对每一个元素,执行相同的操作
使用for就能够实现迭代遍历
name_list = ["张三","李四","王五","张三"]
#使用迭代遍历列表
for my_name in name_list:
print("我的名字叫 %s" % my_name)
- 列表应用场景
尽管python的列表可以存储不同类型的数据,在开发中,常在列表中存储相同类型的数据,再通过迭代遍历,在循环体内部,针对列表中的每一项内容,执行相同的操作。
三、元组
- 常用于存储不同类型的数据。
- 与列表区别:元组中的元素定义后不能修改,用( ) 定义
- 元组的索引从0开始,索引就是数据在元组中的位置编号,数据之间使用,分隔
1.定义元组与取值
-
定义元组:
info_tuple = ("zhangsan",1,1.75)
-
定义一个空元组
info_tuple = ()
-
访问元组内容
info_tuple[1]
-
定义一个包含一个内容的元组:
single_tuple = (5,)
2.元组的操作
- 取值和取索引
info_tuple = ("zhangsan",1,1.75,"zhangsan")
print(info_tuple[0])
#取索引:已经知道数据的内容,希望知道该数据在元组中的索引
print(info_tuple.index("zhangsan"))
- 统计计数
info_tuple = ("zhangsan",1,1.75,"zhangsan")
print(info_tuple.count("zhangsan"))
#统计元组中包含元素的个数
print(len(info_tuple))
- 元组遍历
取值就是从元组中获取存储在指定位置的数据
遍历就是从头到尾依次从元组中获取数据
在python中,可以使用for循环遍历所有非数字型类型的变量:列表、元组、字典以及字符串
在实际开发中,除非能够确认元组中的数据类型,否则针对元组的循环遍历需求并不是很多
#for循环内部使用的变量in元组
for item in info:
循环内部针对元组元素进行操作
print(item)
- 应用场景
尽管可以使用for in 遍历元组,但是在开发中,更多的应用场景是:
函数的参数和返回值,一个函数可以接收任意多个参数,或者一次返回多个数据
格式字符串,格式化字符串后面的()本质上就是一个元组
让列表不可以被修改,以保护数据安全
3.元组和列表之间的转换
- 使用list函数可以把元组转换成列表
list(元组) - 使用tuple函数可以把列表转换成元组
tuple(列表)
四、字典
- 字典(dictionary)是除列表以外python之中最灵活的数据类型
- 字典同样可以用来存储多个数据,通常用于存储描述一个物体的相关信息
- 字典和列表的区别:列表是有序的对象集合;字典是无序的对象集合
- 字典用{ }定义
- 字典使用键值对存储数据,键值对之间使用,分隔;键key是索引,值value是数据,键和值之间使用:分隔,键必须是唯一的,值可以取任何数据类型,但键只能使用字符串、数字或元组
1.字典的定义
#字典是一个无序的数据集合,使用print函数输出字典时通常输出的顺序和定义的顺序是不一致的
xiaoming = {"name":"xiaoming",
"age":18,
"gender":True,
"height":1.75}
print(xiaoming)
2、字典常用操作
- 取值
#字典是一个无序的数据集合,使用print函数输出字典时通常输出的顺序和定义的顺序是不一致的
xiaoming_dict = {"name":"xiaoming",
"age":18,
"gender":True,
"height":1.75}
#取值的时候,如果指定的key不存在,程序会报错
print(xiaoming_dict["name"])
- 增加、修改
xiaoming_dict = {"name":"xiaoming",
"age":18,
"gender":True,
"height":1.75}
#如果key不存在,会新增键值对
#如果key存在,会修改已经存在的键值对
xiaoming_dict["age"] = 28
xiaoming_dict["name"] = "小小明"
print(xiaoming_dict)
- 删除
xiaoming_dict = {"name":"xiaoming",
"age":18,
"gender":True,
"height":1.75}
#在删除指定的键值对的时候,如果指定的key不存在,程序会报错!
xiaoming_dict.pop("name")
print(xiaoming_dict)
- 统计键值对的数量
xiaoming_dict = {"name":"xiaoming",
"age":18}
print(len(xiaoming_dict))
- 合并字典
xiaoming_dict = {"name":"xiaoming",
"age":18}
temp_dict = {"height":1.75,
"age":20}
#如果被合并的字典中包含已经存在的键值对,会覆盖原有的键值对
xiaoming_dict.update(temp_dict)
print(xiaoming_dict)
- 清空字典
xiaoming_dict.clear()
- 字典的循环遍历
xiaoming_dict = {"name":"xiaoming",
"age":18,
"height":1.75}
#迭代遍历字典
#变量k是每一次循环中,获取到的键值对的key
for k in xiaoming_dict:
print("%s - %s" % (k,xiaoming_dict[k]))
- 应用场景
使用多个键值对存储描述一个物体的相关信息–描述更复杂的数据信息
将多个字典放在一个列表中,再进行遍历,在循环体内部针对每一个字典进行相同的处理
#字典是一个无序的数据集合,使用print函数输出字典时通常输出的顺序和定义的顺序是不一致的
xiaoming_dict = {"name":"xiaoming",
"age":18,
"height":1.75}
card_list = [
{"name":"zhangsan",
"age":13},
{"name":"lisi",
"age":23}
]
for card_info in card_list:
print(card_info)
五、字符串
1.字符串定义
- 字符串就是一串字符,是编程语言中表示文本的数据类型
- 在python中可以使用一对双引号“”和一对单引号‘’定义一个字符串,使用" 或者’ 可以做字符串的转义;但是在实际开发中,如果字符串内部需要使用" ,可以使用’ 定义字符串;如果字符串内部需要使用’ ,可以使用" 定义字符串
- 可以使用索引获取一个字符串中指定位置的字符,索引计数从0开始
- 也可以使用for循环遍历字符串中每一个字符
str1 = "hello python"
str2 = '我的外号是"大西瓜"'
print(str2)
2.字符串取值
str1 = "hello pyth
print(str1[1])
3.字符串遍历
str1 = "hello python"
for char in str1:
print(char)
4.字符串常用操作汇总
- 统计字符串的长度
str1 = "hello pythonhello"
print(len(str1))
- 统计某一个小(子)字符串出现的次数
str1 = "hello pythonhello"
print(str1.count("llo"))
print(str1.count("abc"))
- 某一个子字符串出现的位置
注意:如果使用index方法传递的子字符串不存在,程序会报错
str1 = "hello pythonhello"
print(str1.index("llo"))
- 1.判断类型-9
- 2.查找和替换-7
- 3.大小写转换-5
- 4.文本对齐-3
- 5.去除空白字符-3
- 6.拆分和连接-5
5.字符串常用操作
- 判断空白字符
字符串中空格、制表符、回车、换行都是空白字符。
str1 = " \t\n\r"
print(str1.isspace())
- 判断数字的三个方法
一般常用string.isdecimal()方法
- 判断是否以指定字符串开始
str1 = "hello world"
print(str1.startswith("hello"))
- 判断是否以指定字符串结束
str1 = "hello world"
print(str1.endswith("world"))
- 查找指定字符串
index同样可以查找指定的字符串在大字符串中的索引;
使用index查找,如果指定的字符串不存在,会报错
使用find查找,如果指定的字符串不存在,会返回-1
str1 = "hello world"
print(str1.find("llo"))
print(str1.find("abc"))
- 替换字符串
replace方法执行完成之后,会返回一个新的字符串
注意:不会修改原有字符串的内容
str1 = "hello world"
print(str1.replace("world","python"))
print(str1)
- 对齐方式输出文本
# 要求:顺序并且居中对齐输出以下内容
poem = ["登鹳雀楼",
"王之涣",
"百日依山尽",
"黄河入海流",
"欲穷千里目",
"更上一层楼"]
for poem_str in poem:
print("|%s|" % poem_str.center(10," "))
- 去除空白字符
# 要求:顺序并且居中对齐输出以下内容
poem = ["\t\n登鹳雀楼",
"王之涣",
"百日依山尽\t\n",
"黄河入海流",
"欲穷千里目",
"更上一层楼"]
for poem_str in poem:
#先使用strip方法去除字符串中空白字符
#再使用center方法居中显示文本
print("|%s|" % poem_str.strip().center(10," "))
- 拆分和合并字符
要求:将字符串中的空白字符全部去掉
再使用“ ”作为分隔符,拼接成一个整齐的字符串
poem = "登鹳雀楼\t 王之涣 \t 百日依山尽 \t\n 黄河入海流\t\t欲穷千里目\n更上一层楼"
print(poem)
# 拆分字符串
poem_list = poem.split()
print(poem_list)
# 合并字符串
result = " ".join(poem_list)
print(result)
- 字符串的切片
切片方法适用于字符串、元组、列表
切片使用索引值来限定范围,从一个大的字符串中切出小的字符串。
列表和元组都是有序的集合,都能够通过索引值获取到对应的数据。
字典是一个无序的集合,是使用键值对保存数据。
注意:指定的区间属于左闭右开型,从起始位开始,到结束位前一位结束(不包含结束位本身)
从头到尾,开始索引数字可以省略,冒号不能省略
到末尾结束,结束索引数字可以省略,冒号不能省略
步长默认为1,如果连续切片,数字和冒号都可以省略
案例:
num_str = "0123456789"
#1.截取从2~5位置的字符串
print(num_str[2:6])
#2.截取从2~末尾位置的字符串
print(num_str[2:])
#3.截取从开始~5位置的字符串
print(num_str[0:6])
print(num_str[:6])
#4.截取完整的字符串
print(num_str[:])
#5.从开始位置,每隔一个字符截取字符串
print(num_str[::2])
#6.从索引1开始,每隔一个取一个
print(num_str[1::2])
#7.截取从2~末尾-1的字符串
print(num_str[2:-1])
#8.截取字符串末尾两个字符
print(num_str[-2:])
#9.字符串的逆序(面试题)
print(num_str[-1::-1])
print(num_str[::-1])
六、高级变量公共方法
- python内置函数
函数 | 描述 | 备注 |
---|---|---|
len(item) | 计算容器中元素个数 | |
del(item) | 删除变量 | del的两种方式 |
max(item) | 返回容器中元素最大值 | 如果是字典,只针对key比较 |
min(item) | 返回容器中元素最小值 | 如果是字典,只针对key比较 |
del函数对应
a = [1,2,3]
del a[1]
print(a)
del(a[1])
print(a)
运行截图:
字符串比较符合以下规则:0<A<a
- 切片
切片使用索引值来限定范围,从一个的字符串中切出小的字符串
列表和元组都是有序的集合,都能够通过索引值获取到对应的数据
字典是一个无序的集合,是使用键值对保存数据
- 运算符
注意:in在对字典操作时,判断的是字典的键
in和not in被称为成员运算符
成员运算符用于测试序列中是否包含指定的成员。
列表的extend函数和append函数的区别;append函数会将整个列表整体作为一个列表值插入原列表中,extend函数会将列表内的值分别插入到原列表中。
- 完整的for循环语法
for 变量 in 集合
循环体代码
else:
没有通过break退出循环,循环结束后,会执行的代码,如果循环体内部使用了break退出循环,else下方的代码就不会被执行
在迭代遍历嵌套的数据类型时,例如一个列表包含了多个字典,例如要判断某一个字典中是否存在指定的值,如果存在,提示并且退出循环,如果不存在,在循环整体结束后,希望得到一个统一的提示。
students = [
{"name":"阿土"},
{"name":"小美"}
]
#在学员列表中搜索指定的姓名
find_name = "asd"
for stu_list in students:
print(stu_list)
if stu_list["name"] == find_name:
print("找到了 %s" % find_name)
#如果已经找到,应该直接退出循环,而不再遍历后续的元素
break
else:
#如果希望在搜索列表时,所有的字典检查之后,都没有发现需要搜索的目标
#还希望得到一个统一的提示!
print("抱歉没有找到 %s" % find_name)
print("循环结束")
运行截图: