CC++ & Algorithm

Python列表的创建与使用

中等0
语言版本:C++
概述:学会用“购物车”一样的列表来存放多个数据,并能取出、修改和添加内容。

列表:你的“超级购物车”,装得下所有数据

同学们,你们去超市时,是不是都会推一辆购物车?看到好吃的零食、好玩的玩具,就放进车里,结账时再一件件拿出来。Python里的列表就像这辆购物车——它能装下很多个数据,而且你可以随时往里面放新东西、拿走不想要的,或者把里面的东西换掉。学会了列表,你就有了一个能灵活管理多份数据的工具箱。

1. 创建列表:把东西放进购物车

创建一个列表非常简单:用方括号 [] 把数据包起来,数据之间用逗号隔开。比如,你想记录自己今天要买的零食:

snacks = ["薯片", "巧克力", "果汁"]  # 三个字符串元素
print(snacks)  # 输出:['薯片', '巧克力', '果汁']

列表里的每一份数据都叫元素。元素可以是任何类型:数字、文字、小数、真假值……甚至可以把不同类型混在一起(不过通常最好放同一类东西,这样用起来更方便)。

mix = ["苹果", 3, 5.5, True]  # 字符串、整数、小数、布尔值混在一起

你也可以先创建一个空列表,之后慢慢往里加东西:

shopping_cart = []  # 空的购物车

2. 访问列表中的元素:按号叫人

列表里的元素排着队,每个都有自己的位置编号——这个编号叫作索引。注意:Python 是从0开始数的!也就是说,第一个元素是0号,第二个是1号,第三个是2号……

举个例子,你有一张考试成绩列表:

scores = [88, 95, 73, 100, 67]  # 五位同学的数学成绩
print(scores[0])  # 输出:88   (第一位同学)
print(scores[2])  # 输出:73   (第三位同学)
print(scores[4])  # 输出:67   (第五位同学)

Python 还允许你用负数索引,从列表末尾往前数:-1 是最后一个,-2 是倒数第二个。这就像从队尾开始数人。

print(scores[-1])  # 输出:67   (最后一个)
print(scores[-2])  # 输出:100  (倒数第二个)

? 常见错误:索引越界

如果你喊了一个不存在的号码,比如列表只有5个元素,你却要取 scores[5](第6个),程序就会生气地报错:

IndexError: list index out of range

这就像你在排队,喊“第6位同学”,但队伍里只有5个人,自然没有人回应。所以使用索引时,一定要确保它在 0len(列表)-1 之间。想知道列表的长度,可以用 len() 函数:

print(len(scores))  # 输出:5

3. 修改、添加和删除元素:随时调整购物车

列表是“可变”的,也就是说创建之后你还可以随意改动里面的内容。

修改:给指定位置放一个新东西

直接通过索引赋值,就像把购物车里某个位置的东西换成别的。

fruits = ["苹果", "香蕉", "橙子"]
fruits[1] = "西瓜"       # 把第二个(索引1)的香蕉换成西瓜
print(fruits)            # 输出:['苹果', '西瓜', '橙子']

添加:在末尾或指定位置加东西

  • append(新元素):在列表末尾添加一个元素,就像把东西放到购物车最上面。

    fruits.append("葡萄")
    print(fruits)  # 输出:['苹果', '西瓜', '橙子', '葡萄']
    
  • insert(索引, 新元素):在指定位置插入一个元素,其他元素自动往后挪。比如你想把“草莓”插在第一个位置:

    fruits.insert(0, "草莓")
    print(fruits)  # 输出:['草莓', '苹果', '西瓜', '橙子', '葡萄']
    

删除:拿走不想要的东西

  • pop(索引):移除指定位置的元素,并返回这个元素。如果不写索引,默认移除最后一个。

    fruits = ["苹果", "西瓜", "橙子", "葡萄"]
    last = fruits.pop()     # 移除最后一个(葡萄),并保存到变量 last 中
    print(last)             # 输出:葡萄
    print(fruits)           # 输出:['苹果', '西瓜', '橙子']
    
    second = fruits.pop(1)  # 移除索引1(西瓜)
    print(second)           # 输出:西瓜
    print(fruits)           # 输出:['苹果', '橙子']
    
  • remove(值):直接删除第一个匹配的(不是索引)。如果列表里有重复值,只会删除第一个出现的。

    animals = ["猫", "狗", "狗", "兔子"]
    animals.remove("狗")     # 删除第一个"狗"
    print(animals)          # 输出:['猫', '狗', '兔子']
    
  • clear():清空列表,变成空列表。相当于把购物车里的东西全倒出来。

    animals.clear()
    print(animals)  # 输出:[]
    

更多常用操作

  • 判断元素是否存在:用 in 关键字,就像问“这件东西在不在购物车里?”

    bag = ["铅笔", "橡皮", "尺子"]
    print("橡皮" in bag)  # 输出:True
    print("钢笔" in bag)  # 输出:False
    
  • 列表的拼接:用 + 可以把两个列表连起来,变成一个大列表。

    math_scores = [90, 85, 78]
    english_scores = [88, 92, 76]
    all_scores = math_scores + english_scores
    print(all_scores)  # 输出:[90, 85, 78, 88, 92, 76]
    
  • 复制列表:直接用 = 赋值其实是“共用同一个购物车”,如果修改其中一个,另一个也会变。要是想单独复制一份,可以用 copy() 或切片 [:]

    original = [1, 2, 3]
    copy1 = original.copy()
    copy2 = original[:]       # 切片也表示复制一份
    

4. 遍历列表:把购物车里的东西都看一遍

很多时候你需要依次处理列表里的每个元素,比如把每个同学的成绩打印出来。用 for 循环可以轻松搞定:

scores = [88, 95, 73, 100, 67]
for s in scores:                     # s 依次取列表中的每个元素
    print("分数:", s)

如果你想同时知道元素的值和它的索引,可以用 enumerate()

friends = ["小明", "小红", "小刚"]
for i, name in enumerate(friends):
    print("第", i, "位是:", name)
# 输出:
# 第 0 位是: 小明
# 第 1 位是: 小红
# 第 2 位是: 小刚

5. 完整示例:模拟一个简单的购物车程序

让我们把今天学到的知识用起来,写一个可以添加、查看、删除商品的小程序。注意每行代码都加了中文注释,方便你理解。

# 1. 创建一个空购物车列表
cart = []

# 2. 添加几样商品
cart.append("牛奶")     # 用 append 添加
cart.append("面包")
cart.append("鸡蛋")
cart.insert(1, "苹果")  # 在第二个位置插入苹果
print("当前购物车:", cart)   # 输出:['牛奶', '苹果', '面包', '鸡蛋']

# 3. 修改商品:把'面包'改成'蛋糕'
index_bread = cart.index("面包")  # 先找到'面包'的索引
cart[index_bread] = "蛋糕"
print("修改后:", cart)           # 输出:['牛奶', '苹果', '蛋糕', '鸡蛋']

# 4. 删除商品:移除最后一个,再移除'牛奶'
last_item = cart.pop()             # 移除并返回最后一个(鸡蛋)
print("移除了:", last_item)       # 输出:移除了: 鸡蛋

cart.remove("牛奶")                # 直接删除值“牛奶”
print("删除后:", cart)            # 输出:['苹果', '蛋糕']

# 5. 遍历并打印剩余商品
print("购物车还剩:")
for item in cart:
    print(" -", item)
# 输出:
# 购物车还剩:
#  - 苹果
#  - 蛋糕

# 6. 清空购物车
cart.clear()
print("清空后:", cart)            # 输出:[]

6. 新手容易犯的错误(重点看这里)

  1. 索引从0开始,不是1
    list[1] 是第二个元素,不是第一个。很多同学会搞混,写 list[1] 想取第一个,结果取到了第二个。

  2. 索引越界
    列表长度为 n,有效索引是 0n-1。访问 list[n] 会报错。先用 len() 看看长度。

  3. 使用 append 时漏了括号
    list.append 值 这样写会报错,正确写法是 list.append(值)

  4. remove 只删第一个匹配的值
    如果列表里有多个相同的值,remove 只删除最先出现的那一个。想全部删除需要循环。

  5. 直接赋值给另一个变量时,二者共享同一个列表

    a = [1, 2, 3]
    b = a          # b 和 a 指向同一个列表
    b.append(4)
    print(a)       # 输出:[1, 2, 3, 4]  (a 也被改了!)
    

    如果你想要一份独立的副本,用 a.copy()a[:]

7. 小练习(巩固一下)

来试试看:创建一个列表 numbers = [10, 20, 30],然后:

  • 把第二个数(20)改成25
  • 在末尾加上40
  • 删除第一个数(10)
  • 最后打印整个列表,看看是不是变成了 [25, 30, 40]

参考代码(先自己试试,再来看答案哦):

numbers = [10, 20, 30]          # 初始列表
numbers[1] = 25                 # 修改索引1
numbers.append(40)              # 末尾添加
numbers.pop(0)                  # 删除索引0(即第一个数)
print(numbers)                  # 输出:[25, 30, 40]

8. 接下来学什么?

学会了列表,你已经能轻松管理多份数据了。下一步,你可以学习:

  • 字符串:其实字符串也是一种“类似列表”的东西,可以用索引访问单个字符,也可以用 len() 和切片。
  • 元组:像列表但不可修改,适合存放固定不变的数据。
  • 字典:用“名字”来查找数据,比如用同学的名字找他的成绩。
  • 列表推导式:一行代码快速生成列表的魔法。

列表是Python中最常用、最灵活的数据容器,多多练习,你就能玩转它啦!

例题精讲

1单选题

已知列表 lst = [10, 20, 30, 40],执行 lst[1] = 50 后,列表 lst 的内容是什么?

A[10, 50, 30, 40]
B[50, 20, 30, 40]
C[10, 20, 50, 40]
D程序报错,因为列表元素不可修改
2判断题

使用 len() 函数可以获取列表的长度,例如 len([1, 2, 3]) 的结果是 3。

3填空题
补全代码,创建一个包含1、2、3三个整数的列表,然后使用 append 方法添加数字4,最后打印列表,输出应为 [1, 2, 3, 4]。

lst = [1, 2, 3]
lst.___
print(lst)
4单选题

对于列表 lst = ['a', 'b', 'c', 'd', 'e'],以下切片操作 lst[1:4] 的结果是什么?

A['a', 'b', 'c']
B['b', 'c', 'd']
C['b', 'c', 'd', 'e']
D['a', 'b', 'c', 'd']
5填空题
补全代码,先创建一个空列表 lst,然后使用 for 循环将 0 到 4 这 5 个整数依次添加到列表中,最后输出 lst 应为 [0, 1, 2, 3, 4]。

lst = []
for i in range(5):
    lst.___
print(lst)