一、字符串str
字符串就是一串字符,是编程语言中表示文本的数据类型
1. 字符串定义
Python中可以使用一对双引号或者一对单引号定义字符串
str1 = 'hello'
str2 = "hello"
2. 获取字符串中元素
和列表一样,字符串也是通过索引获取元素
str = "hello"
# 获取第三个元素
ele = str[2] # l
3. 遍历字符串
可以通过for
循环遍历字符串
str = 'hello'
for ele in str:
print(ele)
4. 字符串的常见操作
4.1. 判断
方法 | 说明 |
| 如果 string 至少有一个字符并且所有字符都是字母则返回 True |
| 如果 string 只包含数字则返回 True |
| 检查字符串是否是以 str 开头,是则返回 True |
| 检查字符串是否是以 str 结束,是则返回 True |
4.2. 查找替换
方法 | 说明 |
| 检测 str 是否包含在 string 中,如果 start 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回 -1 |
| 类似于 find(),不过是从右边开始查找 |
| 返回一个新字符串,把 string 中的 old_str 替换成 new_str,如果 num 指定,则替换不超过 num 次 |
4.3. 切割
方法 | 说明 |
| 返回列表,以 str 为分隔符拆分 string,如果 maxsplit 有指定值,则仅分隔 maxsplit + 1 个子字符串,str 默认包含 |
4.4. 去空白
方法 | 说明 |
| 返回新字符串,截掉 string 左右两边的空白字符(可以指定截掉的字符) |
5. 练习-用户名和密码校验
# 需求
# ● 用户名和密码格式校验程序
# ● 要求从键盘输入用户名和密码,分别校验格式是否符合规则
# ○ 如果符合,打印用户名合法,密码合法
# ○ 如果不符合,打印出不符合的原因,并提示重新输入
# ● 用户名长度6-20,用户名必须以字母开头
# ● 密码长度至少6位,不能为纯数字,不能有空格
# 1.从键盘输入用户名(需要while循环)
# # 2.长度6-20
# # 3.必须字母开头
# #
# # 4.输入密码(while循环)
# # 5.密码长度至少6位
# # 6.不能为纯数字
# # 7.不能有空格
while True:
username = input("请输入用户名:")
if 6<=len(username)<=20:
if username[0].isalpha():
print("合法")
break
else:
print("用户名必须以字母开头")
continue
else:
print("用户名长度必须在6-20之间")
continue
while True:
password = input("请输入密码")
if len(password)<6:
print("密码长度至少6位")
continue
if password.isdecimal():
print("密码不能为纯数字")
continue
if ' ' in password:
print("密码不能有空格")
continue
print("密码合法")
break
扩展:
isalpha()
字符串中所有元素都是字母,则返回Trueisdecimal()
字符串中都是数字,则返回True
二、集合set
set
被称为集合,是无序的,并且集合中的元素是唯一的
1. 集合的创建
s = {'张三','李四','王五'}
集合是无序的
s = {'张三','李四','王五'}
print(s)
结果:
{'王五', '张三', '李四'}
集合元素唯一
s = {'张三','李四','王五','张三'}
print(s)
结果:
{'李四', '张三', '王五'}
2. 遍历集合中元素
通过for
循环遍历集合中的元素
s = {'张三','李四','王五'}
# 遍历集合
for ele in s:
print(ele)
3. 集合中添加元素
集合可以通过add
方法添加元素
s = {'张三','李四','王五'}
# # 添加赵六 add
s.add('赵六')
4. 集合删除元素
remove
删除,如果有 直接删除,如果没有 程序报错
s = {'张三','李四','王五'}
# 删除张三
s.remove('张三')
pop
删除,随机删除集合中的元素并返回,如果集合中没有元素,则程序报错
s = {'张三','李四','王五'}
# pop 随机删除
print(s.pop())
discard
删除,元素存在则直接删除,如果元素不存在,则不做任何操作
s = {'张三','李四','王五'}
# discard 删除元素 如果元素不存在,不做任何处理
s.discard('林青霞')
三、dict字典
1. 字典的定义
- 字典用
{}
定义- 键值对之间使用
,
分隔- 键和值之间使用
:
分隔
d = {'中国':'China','英国':'England','美国':'America'}
2. 字典的特点
字典中的键相当于索引,必须是唯一的
d = {'中国':'China','英国':'England','美国':'America','美国':'USA'}
print(d)
运行:
{'中国': 'China', '英国': 'England', '美国': 'USA'}
3. 字典增删改查
3.1. 增加
字典增加元素
d = {'中国':'China','英国':'England','美国':'America'}
# 添加 法国
d['法国'] = 'France'
也可以通过setdefault方法添加
d.setdefault('法国','France')
3.2. 删除
字典删除元素
d = {'中国':'China','英国':'England','美国':'America'}
# 删除美国 如果键不在字典中,会报错
del d['法国']
也可以通过pop删除
# pop 删除元素 并且返回删除元素的值 如果删除不存在会报错
result = d.pop('法国')
清空字典
# 清空容器中的数据 还可以继续使用
d.clear()
3.3. 修改
修改字典中元素
d = {'中国':'China','英国':'England','美国':'America'}
# 修改美国
d['美国'] = 'USA'
3.4. 查询
查询元素
d = {'中国':'China','英国':'England','美国':'America'}
# 查找中国
value = d['中国']
print(value)
4. 字典遍历
4.1. 遍历所有的键值对
通过for
循环遍历字典所有的键值对
d = {'中国':'China','英国':'England','美国':'America'}
for ele in d:
print(ele,d[ele])
结果:
中国 China
英国 England
美国 America
4.2. 遍历所有的键
d = {'中国':'China','英国':'England','美国':'America'}
for key in d.keys():
print(key)
结果:
中国
英国
美国
4.3. 遍历所有的值
d = {'中国':'China','英国':'England','美国':'America'}
for value in d.values():
print(value)
结果:
China
England
America
4.4. 遍历所有的键值对
d = {'中国':'China','英国':'England','美国':'America'}
for key,value in d.items():
print(key,value)
结果:
中国 China
英国 England
美国 America
5. 字典的应用场景
使用多个键值对,存储描述一个物体的相关信息---描述更复杂的数据信息
d = {'name':'张三','phone':'12332','age':40,'性别':'男'}
四、slice切片
1. 切片简介
取一个
str
、list
、tuple
的部分元素是非常常见的操作
- 切片 译自英文单词
slice
,指的是一部分- 切片 根据 步长
step
从原序列中取出一部分元素组成新序列- 切片适用于 字符串、列表、元组
2. 切片的格式
字符串[开始索引:结束索引:步长]
包含开始索引, 不包含结束索引
2.1. 需求
string = '中华人民共和国欢迎您'
获取前三个文字
2.2. 代码
string = '中华人民共和国欢迎您'
# 获取前三个文字
newStr = string[0:3:1]
步长默认为1,可以省略,如下
newStr = string[0:3]
开始索引为0,可以省略,如下
newStr = string[:3]
如果到末尾结束,可以省略结束索引,例如取后三个字“欢迎您”
newStr = string[7:]
3. 索引的正序和倒序
索引分为正序和倒序
- 正序:从左向右,
0
开始- 倒序:从右向左,
-1
开始
3.1. 需求
ss = "中华人名共和国欢迎您"
把字符串中从第一个到倒数第二个(不包含)打印出来
3.2. 代码
ss = "中华人名共和国欢迎您"
# 把字符串中从第一个到倒数第二个(不包含)打印出来
# 开始位置:正序 结束位置:倒序
print(ss[:-2])
4. 步长为负数
步长也可以为负数,代表逆序切片
4.1. 需求
ss = "中华人名共和国欢迎您"
把从角标为2到7(包含)倒序打印出来
4.2. 代码
ss = "中华人民共和国欢迎您"
# 把从角标为2到7(包含)倒序打印出来
# 欢国和共名人
print(ss[7:1:-1])
五、推导式
推导式指的是轻量级循环创建数据的方式,对列表或可迭代对象中的每个元素应用某种操作,用生成的结果创建新的列表;或用满足特定条件的元素创建子序列。
推导式包括:
- 列表推导式
- 元组推导式
- 集合推导式
- 字典推导式
1. 列表推导式
列表推导式的格式:[计算公式 for循环 if判断]
通过列表推导式快速创建[1, 11)
所有数字的列表
lst = [ele for ele in range(1, 11)]
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
通过列表推导式快速创建[1, 11)
所有偶数的列表
lst = [ele for ele in range(1, 11) if ele % 2 == 0]
# [2, 4, 6, 8, 10]
通过列表推导式快速创建[1, 11)
所有偶数的平方的列表
lst = [ele ** 2 for ele in range(1, 11) if ele % 2 == 0]
# [4, 16, 36, 64, 100]
2. 元组推导式
元组推导式的格式:(计算公式 for循环 if判断)
,其他与列表推导式一致
tp =(ele for ele in range(1, 11))
3. 集合推导式
集合推导式的格式:{计算公式 for循环 if判断}
,其他与列表推导式一致
s = {ele for ele in range(1, 11)}
4. 字典推导式
d = {key:value for key, value in zip(range(1,10),range(21,30))}
zip(..., ...)
将range(1,10)
和range(21,30)
里的每个元素一一组合成元组
(1, 21)
(2, 22)
(3, 23)
...
(8, 28)
(9, 29)
再把这些元组打包成一个可迭代对象。
5. 推导式练习
# 需求
# 请写出一段 Python 代码实现分组一个 list 里面的元素
# 比如 [1,2,3,...100] 变成 [[1,2,3],[4,5,6]....[100]]
list = [x for x in range(1,101)]
print(list)
list1=[list[x:x+3] for x in range(1,len(list)) if x % 3 == 0]
print(list1)
六、高级变量类型的公共语法
1. 内置函数
高级变量类型有一些公共的内置函数,如下
函数 | 描述 | 备注 |
| 计算容器中元素个数 | |
| 删除变量 | |
| 返回容器中元素最大值 | 字典只比较key |
| 返回容器中元素最小值 | 字典只比较key |
len 长度
str = 'hello'
print(len(str))
结果:
5
del 删除
lst = [1,2,3]
del lst[0]
print(lst)
结果:
[2,3]
2. 运算符
运算符 | 描述 | 支持的数据类型 |
| 合并 | 字符串、列表、元组 |
| 重复 | 字符串、列表、元组 |
| 是否存在(字典中判断键) | 字符串、列表、元组、集合、字典 |
| 是否不存在(字典中判断键) | 字符串、列表、元组、集合、字典 |
| 比较(==以外的较少使用,逐个比较元素) | 字符串、列表、元组 |
2.1. in
和not in
str = 'hello'
# h是否在str中
result = 'h' in str
print(result)
result = 'h' not in str
print(result)
结果:
True
False
2.2. +
合并
只有字符串、列表、元组可以合并
- 字符串
# 字符串
str1 = 'hello'
str2 = 'world'
str = str1 + str2
- 列表
lst1 = [1,2,3]
lst2 = [4,5,6]
lst = lst1 + lst2
- 元组
t1 = (1,2,3)
t2 = (4,5,6)
t = t1 + t2
2.3. *
重复
只有字符串、列表、元组可以
str = 'hello'
print(str*3)
l = [1,2,3]
print(l * 3)
t = (1,2,3)
print(t * 3)
结果:
hellohellohello
[1, 2, 3, 1, 2, 3, 1, 2, 3]
[1, 2, 3, 1, 2, 3, 1, 2, 3]