目录
高级变量
一、列表(数组)
>list(列表)是Python中使用最频繁的数据类型,在其它语言中通常叫做数组;专门用于存储一串信息;列表用"[]"定义,数据之间使用“,”分隔;列表的索引(下标)从0开始;从列表中取值时,如果超出索引范围,程序会报错。
>通常保存相同类型的数据
语法:
name_list = ["zhangsan","lisi","wangwu"]
1.1 取值和取索引
>取值
print(name_list[2])
wangwu
>取索引(若传递的数据不再列表中会报错)
print(name_list.index("wangwu"))
2
1.2修改
name_list[1] = "李四"
name_list = ["zhangsan","李四","wangwu"]
>列表指定的索引超出范围,程序会报错。
1.3 增加
>append 方法可以向列表的末尾追加数据
name_list.append("王小二")
name_list = ["zhangsan","李四","wangwu","王小二"]
>insert 方法可以在列表的指定索引位置插入数据
name_list.insert(1,"小美眉")
name_list = ["zhangsan","小美眉","李四","wangwu","王小二"]
>extend 方法可以把其他列表中的完整内容追加到当前列表的末尾
temp_list = ["孙悟空","猪八戒","沙和尚"]
name_list.extend(temp_list)
name_list = ["zhangsan","李四","wangwu","王小二","孙悟空","猪八戒","沙和尚"]
1.4 删除
>remove 方法可以从列表中删除指定的数据;从列表中删除第一个出现的指定的数据
name_list.remove("wangwu")
print(name_list)
['zhangsan', '小美眉', '李四', '王小二', '孙悟空', '猪八戒', '沙和尚']
>pop方法默认可以把列表中最后一个元素删除
name_list.pop()
print(name_list)
['zhangsan', '小美眉', '李四', '王小二', '孙悟空', '猪八戒']
> clear方法可以清空列表
name_list.clear()
print(name_list)
[]
>使用del关键字删除列表元素
del 关键字本质上是用来将一个变量从内存中删除的。如果使用del关键字将变量从内存中删除,后序的代码就不能再使用这个变量了。
1.5 统计数据
> len 函数可以统计列表中元素的总数
name_list = ["张三","李四","王五","王小二","张三"]
list_len = len(name_list)
print("列表中包含 %d 个元素" % list_len)
列表中包含 5 个元素
> count 方法可以统计列表中某个数据出现的次数
count = name_list.count("张三")
print("张三出现了 %d 次" % count)
张三出现了 2 次
1.6 列表的排序和反转
>升序
name_list = ["zhangsan","lisi","wangwu","wangxiaoer"]
num_list = [6, 8, 4, 1, 10]
# 升序
name_list.sort()
num_list.sort()
['lisi', 'wangwu', 'wangxiaoer', 'zhangsan']
[1, 4, 6, 8, 10]
>降序
name_list.sort(reverse=True)
num_list.sort(reverse=True)
['zhangsan', 'wangxiaoer', 'wangwu', 'lisi']
[10, 8, 6, 4, 1]
>逆序(反转)
name_list.reverse()
num_list.reverse()
['wangxiaoer', 'wangwu', 'lisi', 'zhangsan']
[10, 1, 4, 8, 6]
1.7 关键字、函数和方法的区别
>关键字是Python内置的、具有特殊意义的标识符
关键字后面不需要使用括号。
>函数封装了独立功能,可以直接调用
函数名(参数)
>方法
和函数类似,同样是封装了独立的功能。方法需要通过对象来调用,表示针对这个对象要做的操作。
对象.方法名(参数)
1.8 循环遍历
>遍历就是从头到尾依次从列表中获取数据。在循环体内部针对每一个元素,执行相同的操作。
>在Python中为了提高列表的遍历效率,专门提供的迭代iteration遍历
>使用for 就能够实现迭代遍历
name_list = ["张三","李四","王五","王小二"]
"""
顺序的从列表中一次获取数据,每一次循环过程中,数据都会保存
在my_name 这个变量中,在循环体内部可以访问到当前这一次和获取到的数据
for my_name in 列表变量:
print("我的名字叫 %s " % my_name)
"""
# 使用迭代遍历列表
for my_name in name_list:
print("我的名字叫 %s " % my_name)
我的名字叫 张三
我的名字叫 李四
我的名字叫 王五
我的名字叫 王小二
二、元组
2.1 元组的定义
>Tuple(元组)与列表类似,不同之处在于元组的元素不能修改。元组表示多个元素组成的序列;元组在Python开发中,有特定的应用场景。
>用于存储一串信息,数据之间使用","分隔
>元组用"()"定义
>元组的索引从0开始。索引就是数据在元组中的位置编号。
info_tuple = ("zhangsan",18,1.75)
>创建空元组
empty_tuple = ()
>元组中只包含一个元素时,需要在元素后面添加逗号
info_tuplt = (50,)
2.2 元组的基本使用
>取值和取索引
info_tuple = ("zhangsan",18,1.75,"zhangsan")
# 1.取值和取索引
print(info_tuple[0])
# 已经知道数据的内容,希望知道该数据在元组中的索引
print(info_tuple.index("zhangsan"))
zhangsan
0
>统计计数
print(info_tuple.count("zhangsan"))
# 统计元组中包含元素的个数
print(len(info_tuple))
2
4
2.3 循环遍历
>取值就是从元组中获取存储在指定位置的数据
>遍历就是从头到尾依次从元组中获取数据
info_tuple = ("zhangsan",18,1.75)
# 使用迭代遍历元组
for my_info in info_tuple:
# 使用格式字符串拼接 my_info这个变量不方便
# 因为元组中通常保存的数据类型是不同的
print(my_info)
>在Python中可以使用for循环遍历所有非数字类型的变量:列表、元组、字典以及字符串
2.4 应用场景
>尽管可以使用for in遍历元组
>应用场景:
函数的参数和返回值,一个函数可以接受任意多个参数,或者一次返回多个数据;
格式字符串,格式化字符串后面的()本质上就是一个元组;
让列表不可以被修改,以保护数据安全。
info_tuple = ("小明",21,1.85)
# 格式化字符串后面的“()”本质上就是元组
print("%s 年龄是 %d 身高是%.2f" % info_tuple)
info_str = "%s 年龄是 %d 身高是%.2f" % info_tuple
print(info_str)
小明 年龄是 21 身高是1.85
小明 年龄是 21 身高是1.85
2.5 元组和列表之间的转换
>使用list函数可以把元组转换成列表
list(元组)
>使用tuple函数可以把列表转换成元组
tuple(列表)
三、字典
3.1 字典的定义
>dictionarry(字典)是除列表以外Python之中最灵活的数据类型;字典同样可以用来存储多个数据;通常用于描述一个物体的相关信息
>与列表的区别
列表是有序的对象集合;
字典是无序的对象集合;
>字典用{}定义;字典使用键值对存储数据,键值对之间使用“,”分隔
键key是索引;值value是数据;键和值之间使用:分隔;键必须是唯一的;值可以取任何数据类型,但键只能使用字符串、数字或元组。
# 字典是一个无序的数据集合,使用print函数输出字典时,
# 通常输出的顺序和定义的顺序是不一致的。
xiaoming = {"name":"小明",
"age":18,
"gender":True,
"height":1.75,
"weight":75.5}
print(xiaoming)
{'name': '小明', 'age': 18, 'gender': True, 'height': 1.75, 'weight': 75.5}
3.2 字典的增删改查
>取值
xiaoming_dict = {"name": "小明"}
# 1.取值
print(xiaoming_dict["name"])
# 在取值的时候,如果指定的key不存在,程序会报错
小明
> 增加和修改
# 2.增加/修改
# 如果key不存在,会新增键值对
xiaoming_dict["age"] = 18
print(xiaoming_dict)
# 如果key存在,会修改已经存在的键值对
xiaoming_dict["name"] = "小小明"
print(xiaoming_dict)
{'name': '小明', 'age': 18}
{'name': '小小明', 'age': 18}
>删除
# 3.删除
#在删除指定键值对时,如果指定的key不存在,程序会报错
xiaoming_dict.pop("name")
print(xiaoming_dict)
{'age': 18}
3.3 字典的其他操作
>统计键值对的数量
xiaoming_dict = {"name": "小明",
"age": 18}
# 1.统计键值对数量
print(len(xiaoming_dict))
2
>合并字典
# 2.合并字典
temp_dict = {"height": 1.75,
"age": 20}
# 如果被合并的字典中包含已经存在的键值对,会覆盖原有的键值对
xiaoming_dict.update(temp_dict)
print(xiaoming_dict)
{'name': '小明', 'age': 20, 'height': 1.75}
>清空字典
# 3.清空字典
xiaoming_dict.clear()
print(xiaoming_dict)
{}
3.4 循环遍历
>遍历就是依次从字典中获取所有键值对
xiaoming_dict = {"name": "小明",
"qq": "123456",
"phone": "10086"}
# 迭代遍历字典
# 变量k是每一次循环中,获取到的键值对的key
for k in xiaoming_dict:
print("%s - %s" % (k,xiaoming_dict[k]))
name - 小明
qq - 123456
phone - 10086
3.5 应用场景
>尽管可以使用for in 遍历字典
>使用多个键值对,存储描述一个物体的相关信息——描述更复杂的数据信息;
将多个字典放在一个列表中,再进行遍历,在循环体内部针对每一个字典进行相同的处理。
# 使用多个键值对,存储描述一个物体的相关信息——描述更复杂的数据信息
# 将多个字典放在一个列表中,再进行遍历
card_list = [
{"name": "张三",
"qq": "23456",
"phone": "110"},
{"name": "李四",
"qq": "54321",
"phone":"10086"}
]
for card_info in card_list:
print(card_info)
{'name': '张三', 'qq': '23456', 'phone': '110'}
{'name': '李四', 'qq': '54321', 'phone': '10086'}
四、字符串
4.1 字符串的定义
>字符串就是一串字符,是编程语言中表示文本的数据类型
>在Python中可以使用一对双引号""或者一对单引号''定义一个字符串;虽然可以使用\"或者\'做字符串的转义,但是在实际开发中:
如果字符串内部需要使用",可以使用'定义字符串;
如果字符串内部需要使用',可以使用"定义字符串;
>可以使用索引获取一个字符串中指定位置的字符,索引计数从0开始;也可以使用for循环遍历字符串中的每一个字符。
>大多数编程语言都是用"来定义字符串
str1 = "hello python"
str2 = '我的外号是"大西瓜"'
print(str2)
print(str1[6])
for char in str2:
print(char)
我的外号是"大西瓜"
p
我
的
外
号
是
"
大
西
瓜
"
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"))
11
2
0
2
4.3 判断类型
>判断空白字符。\t,\n,\r被认为是空白字符
# 1.判断空白字符
spac_str = " \t\n\r"
print(spac_str.isspace())
True
>判断字符串中是否包含数字
都不能判断小数;Unicode字符串;中文数字
num_str = "一千零一"
print(num_str)
print(num_str.isdecimal())
print(num_str.isdigit())
print(num_str.isnumeric())
一千零一
False
False
True
num_str = "1"
print(num_str)
print(num_str.isdecimal())
print(num_str.isdigit())
1
True
True
True
num_str = "1.1"
print(num_str)
print(num_str.isdecimal())
print(num_str.isdigit())
print(num_str.isnumeric())
1.1
False
False
False
4.4 字符串的查找和替换
>判断是否以指定字符串开始
hello_str = "hello world"
# 1. 判断是否以指定字符串开始
print(hello_str.startswith("Hello"))
False
>判断是否以指定字符串结尾
# 2. 判断是否以指定字符串结束
print(hello_str.endswith("world"))
True
>查找指定字符串
index同样可以查找指定的字符串在大字符串中的索引;
index如果指定的字符串不存在,会报错;
find如果指定的字符串不存在,会返回-1;
# index同样可以查找指定的字符串在大字符串中的索引
print(hello_str.find("llo"))
# index如果指定的字符串不存在,会报错
# find如果指定的字符串不存在,会返回-1
print(hello_str.find("abc"))
2
-1
>替换字符串
replace方法执行完成之后,会返回一个新的字符串
注意:不会修改原有字符串的内容
# replace方法执行完成之后,会返回一个新的字符串
# 注意:不会修改原有字符串的内容
print(hello_str.replace("world","python"))
print(hello_str)
hello python
hello world
4.5 文本对齐
>居中对齐
poem = ["登鹳雀楼",
"王之涣",
"白日依山尽",
"黄河入海流",
"欲穷千里目",
"更上一层楼"]
for poem_str in poem:
print("|%s|" % poem_str.center(10," "))
| 登鹳雀楼 |
| 王之涣 |
| 白日依山尽 |
| 黄河入海流 |
| 欲穷千里目 |
| 更上一层楼 |
>左侧对齐
for poem_str in poem:
print("|%s|" % poem_str.ljust(10," "))
|登鹳雀楼 |
|王之涣 |
|白日依山尽 |
|黄河入海流 |
|欲穷千里目 |
|更上一层楼 |
>右侧对齐
for poem_str in poem:
print("|%s|" % poem_str.rjust(10," "))
| 登鹳雀楼|
| 王之涣|
| 白日依山尽|
| 黄河入海流|
| 欲穷千里目|
| 更上一层楼|
>去除空白字符
先使用strip方法去除字符串中的空白字符,再使用center方法居中显示文本。
poem = ["\t\n登鹳雀楼",
"王之涣",
"白日依山尽\t\n",
"黄河入海流",
"欲穷千里目",
"更上一层楼"]
for poem_str in poem:
print("|%s|" % poem_str.strip().center(10," "))
| 登鹳雀楼 |
| 王之涣 |
| 白日依山尽 |
| 黄河入海流 |
| 欲穷千里目 |
| 更上一层楼 |
4.6 拆分和合并
poem_str = "登鹳雀楼\t 王之涣 \t 白日依山尽 \t \n 黄河入海流 \t\t 欲穷千里目 \n更上一层楼"
print(poem_str)
# 1. 拆分字符串
poem_list = poem_str.split()
print(poem_list)
# 2. 合并字符串
result = " ".join(poem_list)
print(result)
登鹳雀楼 王之涣 白日依山尽
黄河入海流 欲穷千里目
更上一层楼
['登鹳雀楼', '王之涣', '白日依山尽', '黄河入海流', '欲穷千里目', '更上一层楼']
登鹳雀楼 王之涣 白日依山尽 黄河入海流 欲穷千里目 更上一层楼
4.7 字符串的切片
>切片方法适用于字符串、列表、元组
切片使用索引值来限定范围,从一个大的字符串中切出小的字符串;列表和元组都是有序的集合,都能够通过索引值获取到对应的数据;字典是一个无序的集合,是使用键值对保存数据。
>字符串[开始索引:结束索引:步长]
>指定的区间属于左闭右开型,从头开始,开始索引数字可以省略,冒号不可以省略;
到末尾结束,结束索引数字可以省略,冒号不能省略;步长默认为1,如果连续切片,数字和冒号都可以省略。
num_str = "0123456789"
1.截取从2~5位置的字符串
num_str[2:6]
'2345'
2.截取从2~末尾的字符串
num_str[2:]
'23456789'
3.截取从开始~5位置的字符串
num_str[:6]
'012345'
4.截取完整的字符串
num_str[:]
'0123456789'
5.从开始位置每隔一个字符截取字符串
num_str[::2]
'02468'
6.从索引1开始,每隔一个取一个
num_str[1::2]
'13579'
7.截取从2~末尾-1的字符串
num_str[2:-1]
'2345678'
8.截取字符串末尾两个字符
num_str[-2:]
'89'
9.字符串的逆序
num_str[-1::-1]
'9876543210'
num_str[::-1]
'9876543210'