🚀 每天一小时七天速成自己的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的朋友!我们下期见。

posted @ 2026-03-17 08:50  Petula  阅读(21)  评论(0)    收藏  举报