Hexvork
Python第三讲——Python字符串和列表的拼接、索引、切片

Python第三讲——Python字符串和列表的拼接、索引、切片

上一篇讲了变量和数据类型,这篇来聊聊字符串和列表的操作

字符串和列表是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学习之路越走越顺!