Python 列表 list 入门教程:小白也能看懂的基础操作大全

如果你刚学 Python,不知道如何存储多个数据,那列表(list)绝对是你入门的第一个“神器”。今天我们就用大白话聊清楚列表是什么、怎么创建、怎么增删改查、常见错误怎么解决,全程带完整代码,小白跟着敲一遍就能上手。

1. 列表是什么?

我们可以把 Python 列表理解成生活里的购物清单待办事项列表学生名单

比如你要记录今天要买的东西:

  • 苹果
  • 牛奶
  • 面包

如果不用列表,你可能要写很多变量:

# 这样写也能保存数据,但数据一多就很乱
item1 = "苹果"
item2 = "牛奶"
item3 = "面包"

有了列表,我们可以把多个数据放到一个变量里:

# 用一个列表保存多个商品名称
shopping_list = ["苹果", "牛奶", "面包"]

# 打印整个购物清单
print(shopping_list)

列表有几个很重要的特点:

  • 有序:谁在前、谁在后,顺序是固定的。
  • 可修改:可以添加、删除、修改里面的元素。
  • 能放不同类型的数据:字符串、数字、布尔值都可以放进去。

总结一下:列表就是用来存储多个数据的容器,特别适合保存学生名单、成绩列表、商品清单、待办事项等。

2. 列表的创建

创建列表最常用的是方括号 []。列表里的元素之间要用英文逗号 , 分隔。

2.1 创建空列表

# 创建一个空列表,里面暂时没有任何元素
students = []

# 打印空列表
print(students)

2.2 创建包含多个字符串的列表

# 创建一个学生姓名列表
# 每个姓名都是字符串,字符串需要用引号包起来
students = ["小明", "小红", "小刚"]

# 打印学生列表
print(students)

2.3 创建包含不同类型元素的列表

# 一个列表里可以放不同类型的数据
# "小明" 是字符串,18 是数字,True 是布尔值
student_info = ["小明", 18, True]

# 打印学生信息
print(student_info)

2.4 使用 list() 函数创建列表

# list() 可以把一些数据转换成列表
# 这里把字符串 "abc" 转成列表,每个字符都会变成列表里的一个元素
letters = list("abc")

# 输出结果是 ['a', 'b', 'c']
print(letters)

总结一下:创建列表最常用 [],元素之间用英文逗号隔开

3. 列表元素的访问

列表是有顺序的,所以我们可以通过“位置编号”访问元素。这个位置编号在 Python 里叫索引

小白一定要记住:Python 的索引从 0 开始,不是从 1 开始

3.1 使用正索引访问元素

# 创建一个学生姓名列表
students = ["小明", "小红", "小刚"]

# 索引从 0 开始
# students[0] 表示第 1 个元素
print(students[0])

# students[1] 表示第 2 个元素
print(students[1])

# students[2] 表示第 3 个元素
print(students[2])

3.2 使用负索引访问元素

# 创建一个学生姓名列表
students = ["小明", "小红", "小刚"]

# -1 表示最后一个元素
print(students[-1])

# -2 表示倒数第 2 个元素
print(students[-2])

3.3 使用切片访问多个连续元素

切片可以理解为“从列表里切一段出来”。

# 创建一个成绩列表
scores = [88, 92, 76, 100, 85]

# 取索引 1 到索引 3 之前的元素
# 注意:包含索引 1,不包含索引 3
print(scores[1:3])

# 从开头取到索引 3 之前
print(scores[:3])

# 从索引 2 一直取到最后
print(scores[2:])

特别提醒:如果访问单个元素时索引超出范围,会报错。比如列表只有 3 个元素,就不能访问 students[3]

总结一下:单个元素用索引,多个连续元素用切片;索引从 0 开始

4. 列表元素的添加

列表常用的添加方法有 3 个:append()extend()insert()

4.1 append():在末尾添加一个元素

append() 的意思是“追加”,它会把一个元素加到列表最后。

# 创建一个学生列表
students = ["小明", "小红"]

# 在列表末尾添加一个学生
students.append("小刚")

# 输出结果:['小明', '小红', '小刚']
print(students)

注意:append() 一次只能接收一个参数。

# 创建一个学生列表
students = ["小明", "小红"]

# 如果想一次添加多个学生,不要这样写:
# students.append("小刚", "小李")  # 这行会报错,因为 append() 只能接收一个参数

# 如果把多个学生放在一个列表里再 append,会把整个列表当成一个元素添加进去
students.append(["小刚", "小李"])

# 输出结果:['小明', '小红', ['小刚', '小李']]
print(students)

4.2 extend():在末尾添加多个元素

如果我们想一次添加多个元素,就用 extend()

# 创建一个学生列表
students = ["小明", "小红"]

# extend() 会把另一个列表里的元素一个个加进来
students.extend(["小刚", "小李"])

# 输出结果:['小明', '小红', '小刚', '小李']
print(students)

extend() 不只可以接收列表,也可以接收元组等可遍历的数据。

# 创建一个数字列表
numbers = [1, 2, 3]

# 使用元组添加多个数字
numbers.extend((4, 5, 6))

# 输出结果:[1, 2, 3, 4, 5, 6]
print(numbers)

4.3 insert():在指定位置添加元素

insert(索引, 元素) 可以把元素插入到指定位置。

# 创建一个学生列表
students = ["小明", "小刚"]

# 在索引 1 的位置插入 "小红"
# 原来索引 1 的 "小刚" 会往后移动
students.insert(1, "小红")

# 输出结果:['小明', '小红', '小刚']
print(students)

如果插入的位置超过列表长度,Python 会直接把元素放到最后。

# 创建一个学生列表
students = ["小明", "小红"]

# 索引 100 明显超过列表长度,Python 会把 "小刚" 放到最后
students.insert(100, "小刚")

# 输出结果:['小明', '小红', '小刚']
print(students)

总结一下:append() 加一个,extend() 加多个,insert() 指定位置加一个

5. 列表元素的修改

列表是可以修改的。我们可以通过索引直接修改某个元素,也可以通过切片一次修改多个元素。

5.1 通过索引修改单个元素

# 创建一个学生列表
students = ["小明", "小红", "小刚"]

# 把索引 1 的元素从 "小红" 改成 "小美"
students[1] = "小美"

# 输出结果:['小明', '小美', '小刚']
print(students)

5.2 通过切片修改多个元素

# 创建一个成绩列表
scores = [60, 70, 80, 90]

# 把索引 1 到索引 3 之前的元素替换成新的成绩
# 也就是把 70 和 80 替换成 75 和 85
scores[1:3] = [75, 85]

# 输出结果:[60, 75, 85, 90]
print(scores)

注意:通过索引修改时,索引不能越界。

# 创建一个学生列表
students = ["小明", "小红"]

# students[5] = "小刚"  # 这行会报错,因为索引 5 不存在

# 正确做法:如果想添加新元素,用 append()
students.append("小刚")

print(students)

总结一下:已有元素可以用索引修改,新元素要用添加方法,不要用不存在的索引硬改

6. 列表元素的删除

列表删除元素的方法很多,小白最常用的是 delremove()pop()clear()

6.1 del:通过索引删除元素

# 创建一个学生列表
students = ["小明", "小红", "小刚"]

# 删除索引 1 的元素,也就是 "小红"
del students[1]

# 输出结果:['小明', '小刚']
print(students)

del 也可以删除多个连续元素。

# 创建一个数字列表
numbers = [1, 2, 3, 4, 5]

# 删除索引 1 到索引 4 之前的元素,也就是 2、3、4
del numbers[1:4]

# 输出结果:[1, 5]
print(numbers)

del 还可以删除整个列表变量。

# 创建一个列表
students = ["小明", "小红"]

# 删除整个列表变量
del students

# 删除后再访问 students 会报错
# print(students)  # NameError: name 'students' is not defined

6.2 remove():根据元素值删除

remove() 是根据“值”来删除,而不是根据索引。

# 创建一个水果列表
fruits = ["苹果", "香蕉", "苹果", "橙子"]

# 删除第一个出现的 "苹果"
fruits.remove("苹果")

# 输出结果:['香蕉', '苹果', '橙子']
print(fruits)

注意:如果列表里有多个相同元素,remove() 只删除第一个。

如果元素不存在,remove() 会报错。

# 创建一个水果列表
fruits = ["苹果", "香蕉"]

# 删除前先判断,避免元素不存在时报错
if "橙子" in fruits:
    fruits.remove("橙子")
else:
    print("列表里没有橙子,不能删除")

print(fruits)

6.3 pop():删除元素并返回被删除的值

pop() 默认删除最后一个元素。

# 创建一个待办列表
todo_list = ["写作业", "洗衣服", "看书"]

# pop() 默认删除最后一个元素,并把被删除的元素返回给变量
done = todo_list.pop()

print("刚刚完成的事情:", done)
print("剩余待办:", todo_list)

pop() 也可以指定索引删除。

# 创建一个学生列表
students = ["小明", "小红", "小刚"]

# 删除索引 0 的元素,也就是 "小明"
removed_student = students.pop(0)

print("被删除的学生:", removed_student)
print("剩余学生:", students)

6.4 clear():清空列表

clear() 会把列表里的元素全部清空,但列表本身还在。

# 创建一个购物车列表
cart = ["苹果", "牛奶", "面包"]

# 清空购物车
cart.clear()

# 输出结果:[]
print(cart)

总结一下:del 按索引删,remove 按值删,pop 删除并返回,clear 清空列表

7. 列表常用操作与方法

下面这些方法非常常用,小白一定要熟悉。

7.1 len():获取列表长度

# 创建一个学生列表
students = ["小明", "小红", "小刚"]

# len() 可以获取列表里有多少个元素
count = len(students)

print("学生人数:", count)

7.2 count():统计元素出现次数

# 创建一个成绩等级列表
grades = ["A", "B", "A", "C", "A"]

# 统计 "A" 出现了几次
a_count = grades.count("A")

print("A 出现的次数:", a_count)

7.3 index():查找元素索引

# 创建一个学生列表
students = ["小明", "小红", "小刚"]

# 查找 "小红" 的索引
index = students.index("小红")

print("小红的索引是:", index)

如果元素不存在,index() 会报错,所以可以先判断。

# 创建一个学生列表
students = ["小明", "小红", "小刚"]

# 查找前先判断,避免报错
if "小李" in students:
    print(students.index("小李"))
else:
    print("列表里没有小李")

7.4 sort():排序

sort() 会直接修改原列表,默认从小到大排序。

# 创建一个成绩列表
scores = [88, 60, 95, 72]

# 默认升序排序,从小到大
scores.sort()

print(scores)

如果想降序排序,可以设置 reverse=True

# 创建一个成绩列表
scores = [88, 60, 95, 72]

# 降序排序,从大到小
scores.sort(reverse=True)

print(scores)

注意:排序时,列表里的元素类型最好一致。不要把数字和字符串混在一起排序。

7.5 reverse():反转列表顺序

reverse() 不是排序,而是把当前顺序倒过来。

# 创建一个学生列表
students = ["小明", "小红", "小刚"]

# 把列表顺序反过来
students.reverse()

# 输出结果:['小刚', '小红', '小明']
print(students)

7.6 copy():复制列表

小白很容易把“赋值”和“复制”搞混,我们来看对比。

# 创建一个原始列表
students = ["小明", "小红"]

# 这不是复制,只是给同一个列表起了另一个名字
new_students = students

# 修改 new_students,也会影响 students
new_students.append("小刚")

print("students:", students)
print("new_students:", new_students)

如果想真正复制一份新列表,可以用 copy()

# 创建一个原始列表
students = ["小明", "小红"]

# copy() 会复制出一个新的列表
new_students = students.copy()

# 修改新列表,不会影响原列表
new_students.append("小刚")

print("原列表 students:", students)
print("新列表 new_students:", new_students)

这里的 copy() 是基础复制,也叫浅复制。小白阶段先记住一句话就够了:普通的一层列表,用 copy() 复制基本够用

总结一下:len 看长度,count 数次数,index 找位置,sort 排序,reverse 反转,copy 复制

8. 小白常遇错误及解决方法

学列表时,报错很正常。关键是我们要看懂为什么错,知道怎么改。

8.1 索引越界错误 IndexError

错误代码:

# 列表只有 3 个元素,索引最大是 2
students = ["小明", "小红", "小刚"]

# 错误:索引 3 不存在
print(students[3])

常见报错信息:

IndexError: list index out of range

错误原因:列表索引从 0 开始,3 个元素的索引是 0、1、2,没有 3。

修正代码:

# 正确访问最后一个元素
students = ["小明", "小红", "小刚"]

# 方法 1:使用索引 2
print(students[2])

# 方法 2:使用 -1,表示最后一个元素
print(students[-1])

8.2 append() 添加多个元素时容易用错

错误代码:

# 创建一个学生列表
students = ["小明", "小红"]

# 错误:append() 只能接收一个参数
# students.append("小刚", "小李")

常见报错信息:

TypeError: list.append() takes exactly one argument

错误原因:append() 一次只能添加一个元素。

修正代码:

# 创建一个学生列表
students = ["小明", "小红"]

# 如果要添加多个元素,用 extend()
students.extend(["小刚", "小李"])

print(students)

再看一个容易误会的情况:

# 创建一个学生列表
students = ["小明", "小红"]

# 这不会添加两个学生,而是把整个列表当成一个元素添加进去
students.append(["小刚", "小李"])

print(students)

8.3 remove() 删除不存在的元素

错误代码:

# 创建一个水果列表
fruits = ["苹果", "香蕉"]

# 错误:列表里没有 "橙子"
fruits.remove("橙子")

常见报错信息:

ValueError: list.remove(x): x not in list

错误原因:remove() 删除的元素必须真的存在。

修正代码:

# 创建一个水果列表
fruits = ["苹果", "香蕉"]

# 删除前先判断
if "橙子" in fruits:
    fruits.remove("橙子")
else:
    print("橙子不在列表里,不能删除")

print(fruits)

8.4 排序时元素类型不一致 TypeError

错误代码:

# 列表里既有数字,又有字符串
data = [10, 3, "20"]

# 错误:数字和字符串不能直接放一起排序
data.sort()

常见报错信息:

TypeError: '<' not supported between instances of 'str' and 'int'

错误原因:Python 不知道数字 10 和字符串 "20" 谁大谁小。

修正代码:

# 如果这些数据本质上都是数字,就先统一转成数字
data = [10, 3, "20"]

# 用列表推导式把每个元素都转成 int
# 小白可以先理解为:把 data 里的每个元素逐个转成整数
numbers = [int(item) for item in data]

# 现在都是数字了,可以正常排序
numbers.sort()

print(numbers)

8.5 把赋值当成复制

容易混淆的代码:

# 创建一个原列表
old_list = ["苹果", "香蕉"]

# 这不是复制,只是两个变量指向同一个列表
new_list = old_list

# 修改 new_list
new_list.append("橙子")

# old_list 也跟着变了
print(old_list)
print(new_list)

修正代码:

# 创建一个原列表
old_list = ["苹果", "香蕉"]

# 使用 copy() 复制一个新列表
new_list = old_list.copy()

# 修改新列表
new_list.append("橙子")

# 原列表不会受影响
print(old_list)
print(new_list)

总结一下:遇到报错别慌,先看报错类型,再回头检查索引、元素是否存在、方法用法是否正确

9. 结尾总结

今天我们从小白角度学习了 Python 列表的基础操作:

  • 创建列表:[]list()
  • 访问元素:索引、切片
  • 添加元素:append()extend()insert()
  • 修改元素:索引修改、切片修改
  • 删除元素:delremove()pop()clear()
  • 常用方法:len()count()index()sort()reverse()copy()

列表非常实用,大家以后写 Python 时会经常用到它。最后给大家两个简单小案例,可以自己敲一遍。

小案例 1:待办事项列表

# 创建一个待办事项列表
todo_list = []

# 添加几个待办事项
todo_list.append("写作业")
todo_list.append("洗衣服")
todo_list.append("看书")

# 打印当前待办事项
print("当前待办:", todo_list)

# 完成最后一个任务
done = todo_list.pop()

# 打印完成的任务和剩余任务
print("刚完成:", done)
print("剩余待办:", todo_list)

小案例 2:学生成绩排序

# 创建一个成绩列表
scores = [88, 95, 72, 60, 100]

# 按从高到低排序
scores.sort(reverse=True)

# 打印排序后的成绩
print("成绩从高到低:", scores)

# 打印最高分
print("最高分:", scores[0])

# 打印最低分
print("最低分:", scores[-1])

列表并不难,难的是刚开始不熟。小白们只要多写、多改、多运行,慢慢就会发现:列表真的很好用。

更多推荐