上一篇讲了变量和数据类型,这篇来聊聊字符串和列表的操作。
字符串和列表是Python里最常用的两种数据类型,今天就把它们的拼接、索引、切片操作一次性讲透。
一、字符串拼接
1. 不同内容拼接用加号
当你想把不同的字符串连在一起时,直接用 + 号:
first_name = "张"
last_name = "三"
full_name = first_name + last_name
print(full_name) # 输出:张三
# 拼接多个字符串
greeting = "你好" + "," + "世界" + "!"
print(greeting) # 输出:你好,世界!
注意事项:
- 只能拼接字符串,不能直接拼接数字
- 如果要拼接数字,必须先转成字符串
age = 18
# message = "我今年" + age + "岁" # ❌ 报错:不能把字符串和整数拼接
# 正确做法
message = "我今年" + str(age) + "岁"
print(message) # 输出:我今年18岁
2. 相同内容拼接用乘号
想重复输出同一个字符串?用 * 号:
star = "★"
line = star * 10
print(line) # 输出:★★★★★★★★★★
# 实用场景:打印分隔线
print("=" * 30) # 输出:==============================
print("标题")
print("=" * 30)
这个技巧在格式化输出时特别好用,比手动复制粘贴省事多了。
二、len()函数
len() 函数用来获取字符串或列表的长度:
1. 字符串长度
text = "Hello"
print(len(text)) # 输出:5
name = "张三"
print(len(name)) # 输出:2
# 空字符串
empty = ""
print(len(empty)) # 输出:0
2. 列表长度
numbers = [1, 2, 3, 4, 5]
print(len(numbers)) # 输出:5
names = ["张三", "李四", "王五"]
print(len(names)) # 输出:3
# 空列表
empty_list = []
print(len(empty_list)) # 输出:0
实用技巧:
password = input("请输入密码:")
if len(password) < 6:
print("密码太短,至少需要6位")
else:
print("密码符合要求")
这里的if和else你现在还不用纠结,后续我们会具体学习
三、字符串索引和切片
1. 索引的概念
索引就是字符在字符串中的位置编号,Python支持正索引和负索引:
st = "A B C D E F G"
# 正索引:0 1 2 3 4 5 6
# 负索引:-7 -6 -5 -4 -3 -2 -1
正索引:从左往右,从 0 开始
负索引:从右往左,从 -1 开始
2. 索引
用方括号 [] 加索引号来取出单个字符:
st = "A B C D E F G"
# 正索引
print(st[0]) # 输出:A
print(st[2]) # 输出:C
print(st[6]) # 输出:G
# 负索引
print(st[-1]) # 输出:G(最后一个)
print(st[-2]) # 输出:F(倒数第二个)
print(st[-7]) # 输出:A(倒数第七个,也就是第一个)
常见错误:
st = "ABC"
print(st[3]) # ❌ 报错:索引超出范围(只有0、1、2三个位置)
3. 切片
切片语法:变量名[起始:结束:步长]
重要规则:
- 起始:从哪个位置开始(包含)
- 结束:到哪个位置结束(不包含)
- 步长:每次跳几个字符(默认是1)
st = "A B C D E F G"
# 基础切片
print(st[2:5]) # 输出:C D(索引2到4,不包含5)
print(st[0:3]) # 输出:A B(索引0到2)
# 省略起始(从头开始)
print(st[:3]) # 输出:A B(等同于st[0:3])
# 省略结束(到末尾)
print(st[4:]) # 输出:E F G(从索引4到最后)
# 全部省略(复制整个字符串)
print(st[:]) # 输出:A B C D E F G
4. 步长的妙用
步长控制每次跳几个字符:
st = "A B C D E F G"
# 步长为2(每次跳一个)
print(st[0:7:2]) # 输出:A C E G(取索引0、2、4、6)
print(st[::2]) # 输出:A C E G(省略起始和结束,其实默认为0,结束默认为列表最后一个字符)
# 步长为3
print(st[::3]) # 输出:A D G
# 负步长(反向取)
print(st[::-1]) # 输出:G F E D C B A,这样字符串就反转了
5. 负索引切片
负索引在切片中也能用:
st = "A B C D E F G"
# 从倒数第5个到倒数第2个(不包含倒数第2个)
print(st[-5:-2]) # 输出:C D E
# 从倒数第5个开始,每隔一个取一个
print(st[-5:-2:2]) # 输出:C E
四、列表索引和切片
列表的索引和切片操作跟字符串几乎一样,只是结果类型不同。
1. 列表示例
people = [701, "小美", 702, "小帅", 703, "小萌"]
# 正编号:0 1 2 3 4 5
# 负编号:-6 -5 -4 -3 -2 -1
2. 索引
索引取出的是元素本身的类型:
people = [701, "小美", 702, "小帅", 703, "小萌"]
# 正索引
print(people[0]) # 输出:701(整数类型)
print(people[1]) # 输出:小美(字符串类型)
print(people[3]) # 输出:小帅
# 负索引
print(people[-1]) # 输出:小萌(最后一个)
print(people[-2]) # 输出:703
print(people[-6]) # 输出:701(第一个)
# 查看类型
print(type(people[0])) # <class 'int'>
print(type(people[1])) # <class 'str'>
3. 切片
切片取出的结果仍然是列表:
people = [701, "小美", 702, "小帅", 703, "小萌"]
# 基础切片
print(people[1:4]) # 输出:['小美', 702, '小帅']
print(people[0:2]) # 输出:[701, '小美']
# 带步长的切片
print(people[1:4:2]) # 输出:['小美', '小帅'](索引1和3)
print(people[::2]) # 输出:[701, 702, 703](所有偶数索引)
# 反转列表
print(people[::-1]) # 输出:['小萌', 703, '小帅', 702, '小美', 701]
# 查看类型
print(type(people[1:4])) # <class 'list'>
六、索引 vs 切片的区别
这是新手最容易搞混的地方:
记忆技巧:
- 索引用单个数字,结果是元素本身
- 切片用冒号,结果是一串内容
七、常见错误与解决
1. 索引越界
text = "ABC"
print(text[5]) # ❌ 报错:索引超出了字符串的范围,字符串只有3个字符没有5个字符
解决:使用前先检查长度:
text = "ABC"
if len(text) > 5:
print(text[5])
else:
print("索引超出范围")
2. 切片范围错误
text = "ABCDE"
print(text[5:2]) # 输出:''(空字符串,不会报错但没意义)
解决:确保起始索引小于结束索引(正向切片时)。
3. 步长为0
text = "ABCDE"
print(text[::0]) # ❌ 报错:步长不能为0
解决:步长必须是非零整数。
4. 混淆索引和切片
numbers = [10, 20, 30]
# 想取出20进行计算
result = numbers[1:2] + 5 # ❌ 报错:列表不能和整数相加
# 正确做法
result = numbers[1] + 5 # ✅ 输出:25
八、进阶技巧
1. 切片赋值(列表专属)
列表支持通过切片修改多个元素:
numbers = [1, 2, 3, 4, 5]
numbers[1:3] = [20, 30]
print(numbers) # 输出:[1, 20, 30, 4, 5]
# 插入元素
numbers[2:2] = [100, 200]
print(numbers) # 输出:[1, 20, 100, 200, 30, 4, 5]
注意:字符串不支持切片赋值,因为字符串是不可变类型。
2. 浅拷贝
用切片可以快速复制列表:
original = [1, 2, 3]
copy = original[:] # 创建副本
copy[0] = 100
print(original) # 输出:[1, 2, 3](原列表不变)
print(copy) # 输出:[100, 2, 3]
九、结语
这篇文章把字符串和列表的核心操作都讲了一遍,本篇内容可能比较深奥,你可以像AI求助彻底学会Python字符串和列表的拼接、索引、切片。掌握这些操作,你就能灵活处理字符串和列表了。
Study forever,让Python学习之路越走越顺!