🚀 每天一小时七天速成自己的AI聊天语言模型(Day 3:字符串与列表操作全攻略)
Python入门必学:字符串与列表操作全攻略(附实战案例)
你好,今天我们将通过一份超详细的笔记,系统学习Python中两个最重要的数据类型:字符串 和 列表。无论你是刚接触编程的新手,还是想巩固基础的同学,这篇文章都能帮你快速掌握核心操作,并能独立完成实用的小项目。
一、字符串基础
1.1 什么是字符串?
字符串就是用引号包裹起来的一串字符。在Python中,你可以用单引号、双引号或三引号来定义字符串。
s1 = 'abc'
s2 = "xyz"
s3 = ''' 张三
李四
王五''' # 三引号可以换行
s4 = """
select
*
from
student
""" # 同样可以换行
print(s1)
print(s2)
print(s3)
print(s4)
注意:如果字符串内容本身包含引号,需要转义或使用另一种引号:
# 正确输出 I'm Tom!
s5 = "I'm Tom!"
s6 = 'I\'m Tom!' # 反斜杠转义
print(s5)
print(s6)
1.2 字符串的索引
字符串中的每个字符都有自己的编号(索引),我们可以通过索引来获取指定位置的字符。
- 正向索引:从左到右,从 0 开始。
- 逆向索引:从右到左,从 -1 开始。
例如字符串 'abcdefg' 的索引如下:
| 字符 | a | b | c | d | e | f | g |
|---|---|---|---|---|---|---|---|
| 正向索引 | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
| 逆向索引 | -7 | -6 | -5 | -4 | -3 | -2 | -1 |
代码示例:
s7 = 'abcdefg'
print(s7[2]) # 输出 c
print(s7[-5]) # 输出 c(逆向索引)
二、字符串切片(截取子串)
切片是Python中非常强大的功能,可以从字符串中截取指定部分。
格式:字符串[起始索引:结束索引:步长]
- 起始索引:包含,默认为 0。
- 结束索引:不包含(包左不包右),默认为字符串长度。
- 步长:决定取字符的间隔,默认为 1。
2.1 正向切片
s1 = 'abcdefg'
print(s1[2:5]) # cde(从2到4)
print(s1[:6]) # abcdef(从0到5)
print(s1[::3]) # adg(每隔3个取一个)
print(s1[2:]) # cdefg(从2到末尾)
2.2 逆向切片
print(s1[-5:-1]) # cdef(从-5到-2)
print(s1[-1:-5:-1]) # gfed(步长为负数,从右向左取)
print(s1[::-1]) # gfedcba(字符串反转)
常见错误:当切片方向与步长方向不一致时,会得到空字符串。
print(s1[-5:-1:-1]) # 无输出(因为步长向左,但起始-5在结束-1左边)
三、字符串常用函数
Python为字符串提供了大量内置函数,让操作变得简单。
3.1 查找函数
find(子串, 起始, 结束):返回子串第一次出现的索引,找不到返回 -1。rfind(子串, 起始, 结束):返回子串最后一次出现的索引。count(子串):统计子串出现的次数。
s1 = 'hello and python and python and python and linux'
print(s1.find('python')) # 10
print(s1.find('python', 11)) # 21
print(s1.rfind('python')) # 32
print(s1.count('python')) # 3
3.2 修改函数
字符串是不可变类型,所以修改操作都会返回一个新字符串,原字符串不变。
replace(旧子串, 新子串, 替换次数):替换字符串中的子串。split(切割符, 切割次数):按指定字符切割成列表。join(列表):将列表中的元素用指定字符连接成字符串。lower()/upper():将字母转为小写/大写。
s1 = 'hello and python and world and sql'
# replace
s2 = s1.replace('and', '&')
print(s2) # hello & python & world & sql
print(s1.replace('and', '&', 2)) # 只替换前两个
# split
print(s1.split('and')) # ['hello ', ' python ', ' world ', ' sql']
# join
list1 = ['aa', 'bb', 'cc']
print('#'.join(list1)) # aa#bb#cc
# lower/upper
print(s1.upper()) # 全大写
print(s1.lower()) # 全小写
print(s1) # 原字符串不变
3.3 判断函数
isdigit():判断字符串是否全部由数字组成(常用于验证输入)。
print('123'.isdigit()) # True
print('12.3'.isdigit()) # False(有小数点)
实战应用:检查用户输入的年龄是否合法
age_str = input('请输入您的年龄:')
if age_str.isdigit():
now_age = int(age_str)
print(f'10年后您{now_age + 10}岁')
else:
print('请输入纯数字!')
四、字符串实战练习题
4.1 打印奇数位上的字符
输入一个字符串,打印所有下标为奇数的字符(即第1、3、5...位)。
s1 = 'abcdefg'
# 方法1:遍历索引
for i in range(len(s1)):
if i % 2 != 0:
print(s1[i])
# 方法2:直接取奇数索引
for i in range(1, len(s1), 2):
print(s1[i])
4.2 生成随机验证码
从包含大小写字母和数字的字符串中随机取出4个字符,组成验证码。
import random
s1 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
# 方法1:随机索引
code = ''
for i in range(4):
idx = random.randint(0, len(s1)-1)
code += s1[idx]
print(code)
# 方法2:random.choice()
code = ''
for i in range(4):
code += random.choice(s1)
print(code)
# 方法3:random.choices() + join
code = ''.join(random.choices(s1, k=4))
print(code)
# 方法4:random.sample()(不重复)
code = ''.join(random.sample(s1, k=4))
print(code)
# 方法5:打乱列表
list1 = list(s1)
random.shuffle(list1)
code = ''.join(list1[:4])
print(code)
五、列表基础
列表是Python中常用的容器类型,可以同时存储多个数据,且可变(可以修改内容)。
5.1 定义列表
list1 = [] # 空列表
list2 = list() # 空列表
list3 = [10, 20, True, 'abc', 10.3] # 不同类型
print(list3)
5.2 索引访问
和字符串一样,列表也支持索引。
my_list = [10, 20, 30, 40, 50]
print(my_list[1]) # 20
print(my_list[-1]) # 50
5.3 遍历列表
三种常用方式:
# while循环(索引)
i = 0
while i < len(my_list):
print(my_list[i])
i += 1
# for循环(索引)
for i in range(len(my_list)):
print(my_list[i])
# for循环(直接取元素,推荐)
for value in my_list:
print(value)
六、列表的增删改查
6.1 增加元素
append(元素):在末尾追加。insert(索引, 元素):在指定位置插入。
my_list = ['aa', 'bb', 'cc']
my_list.append('xx') # ['aa', 'bb', 'cc', 'xx']
my_list.insert(2, 'yy') # ['aa', 'bb', 'yy', 'cc', 'xx']
6.2 删除元素
remove(元素):删除第一个匹配项。pop(索引):删除指定索引的元素,并返回它。clear():清空列表。del:删除指定元素或整个列表。
my_list = ['aa', 'bb', 'cc', 'bb']
my_list.remove('bb') # 删除第一个'bb'
my_list.pop(1) # 删除索引1的元素
del my_list[0] # 删除索引0的元素
my_list.clear() # 清空
del my_list # 彻底删除列表(不能再使用)
6.3 修改元素
直接通过索引赋值即可。
my_list[2] = 'xyz'
6.4 查询元素
len(列表):获取长度。元素 in 列表:判断是否存在。元素 not in 列表:判断是否不存在。
print(len(my_list))
print('bb' in my_list) # True/False
print('xx' not in my_list) # True/False
七、列表的反转与排序
7.1 反转
my_list = [11, 55, 22, 33, 66]
my_list.reverse() # 原地反转
print(my_list) # [66, 33, 22, 55, 11]
# 也可以用切片
my_list = my_list[::-1]
7.2 排序
sort(reverse=False):默认升序,reverse=True为降序。
my_list.sort() # 升序 [11, 22, 33, 55, 66]
my_list.sort(reverse=True) # 降序 [66, 55, 33, 22, 11]
八、列表嵌套
列表的元素可以是另一个列表,这就是列表嵌套。
8.1 定义与访问
name_list = [
['胡歌', '彭于晏', '刘烨'],
['刘亦菲', '赵丽颖', '杨幂'],
['亮亮', '泉泉', '强强']
]
print(name_list[1]) # ['刘亦菲', '赵丽颖', '杨幂']
print(name_list[1][0]) # '刘亦菲'
8.2 遍历嵌套列表
for child_list in name_list:
for name in child_list:
print(name, end='\t')
print() # 换行
九、实战案例:随机分配办公室
需求:有8个学生和3个教室,将学生随机分配到教室中,并打印结果。
import random
# 学生列表
stu_list = ['苏轼', '苏洵', '苏辙', '韩愈', '柳宗元', '欧阳修', '王安石', '曾巩']
# 教室列表(3个空列表)
class_list = [[], [], []]
# 遍历每个学生
for stu in stu_list:
# 随机生成教室编号(0,1,2)
idx = random.randint(0, len(class_list)-1)
# 将学生加入对应教室
class_list[idx].append(stu)
# 打印结果
for i, clazz in enumerate(class_list):
print(f'教室{i+1}: {clazz}')
运行一次,结果可能类似于:
教室1: ['苏轼', '韩愈', '欧阳修']
教室2: ['苏洵', '柳宗元', '曾巩']
教室3: ['苏辙', '王安石']
十、总结
今天我们学习了:
- 字符串的定义、索引、切片及常用函数(查找、修改、判断)。
- 字符串的实战应用(奇数位字符、验证码生成)。
- 列表的定义、索引、遍历及增删改查操作。
- 列表的反转、排序及嵌套使用。
- 一个完整的随机分配办公室案例。
这些知识是Python编程的基石,掌握它们后,你已经可以处理很多实际问题了。记得多动手敲代码,把示例都运行一遍,遇到问题再回来看看这篇文章。
如果你觉得本文对你有帮助,欢迎点赞、收藏、分享给更多学习Python的朋友!我们下期见。

浙公网安备 33010602011771号