当前位置:首页>python>Python 基础 —— 列表结构 —— 让程序有序管理数据

Python 基础 —— 列表结构 —— 让程序有序管理数据

  • 2026-09-29 22:17:00
Python 基础 —— 列表结构 —— 让程序有序管理数据

上一篇我们借助循环结构,让程序学会了重复执行代码,完成了自助收银台的连续商品处理、优惠券核销等功能。在案例中我们初次用到了列表这个 “数据容器”,它能帮我们把零散的商品名称、价格等数据有序地整合在一起。这一篇,我们就来深入学习 Python 中最常用、最灵活的基础数据结构 —— 列表,让我们的收银台系统能更高效地管理商品与订单数据。

1. 目标

掌握 Python 列表的核心特性与基础操作,能使用列表完成数据的有序存储、增删改查与遍历,结合上一篇学习的循环结构,实现更灵活的业务逻辑,完成智能收银台系统的全面升级。

2. 知识点

  • 列表的创建与基础特性
  • 列表的索引与切片操作
  • 列表增删改查的核心内置方法
  • for循环遍历列表的进阶用法(含 enumerate 枚举)
  • 列表的排序、反转与统计方法
  • 嵌套列表的基础使用与遍历

3. 代码示例:全面升级智能收银台 —— 用列表实现购物车全功能管理

我们将基于上一篇的自助收银台,用列表重构并升级功能,实现购物车的动态管理、商品排序、多订单处理等核心能力,同时巩固循环结构的用法。

# 第四天:列表结构 —— 升级版智能收银台购物车系统
import random
import time  # 导入时间模块,用于模拟处理过程

# --- 案例1:列表的创建与索引/切片——商品库与购物车初始化 ---
print("=== 欢迎使用升级版智能自助收银台 ===")

# 列表创建:用[]存储固定商品库,包含名称、单价,一一对应
goods_library =["矿泉水","方便面","火腿肠","面包","牛奶","饮料"]
price_library =[2.0,4.5,3.0,8.0,5.5,4.0]

# 初始化空列表,用于存储用户购物车的商品
cart_names =[]# 购物车商品名称
cart_prices =[]# 购物车商品单价
cart_quantity =[]# 购物车商品数量

print("当前超市在售商品:")
# 基础索引取值:列表索引从0开始,通过[序号]获取对应元素
for i inrange(len(goods_library)):
print(f" 编号 {i+1}:{goods_library[i]},单价 {price_library[i]} 元")
print("-"*50)

# 切片操作演示:获取前3款引流商品
hot_goods = goods_library[:3]# 取列表前3个元素
hot_prices = price_library[:3]
print(f"今日爆款商品:{hot_goods},对应单价:{hot_prices}")
time.sleep(1)
print("-"*50)

# --- 案例2:列表的增删改操作——购物车动态管理 ---
print("\n--- 购物车商品管理 ---")
print("操作说明:输入商品编号添加商品,输入0完成选购,输入-1删除商品,输入-2修改商品数量")

# 结合while循环,实现购物车的持续操作
whileTrue:
# 为了代码自动运行演示,生成随机操作指令,实际使用可替换为input输入
# 实际应用替换为:operation = input("请输入您的操作指令:")
    operation = random.choice(["1","2","3","4","5","6","0","-1","-2"])
print(f"\n您输入的操作指令:{operation}")

# 结束选购
if operation =="0":
print("✅ 选购完成,正在结算...")
break

# 删除商品
elif operation =="-1":
ifnot cart_names:# 判断购物车是否为空
print("❌ 购物车为空,暂无商品可删除")
continue
# 随机选择要删除的商品,实际使用可让用户输入商品序号
        del_index = random.randint(0,len(cart_names)-1)
        del_name = cart_names.pop(del_index)# pop方法:根据索引删除元素,并返回该元素
        cart_prices.pop(del_index)
        cart_quantity.pop(del_index)
print(f"🗑️ 已删除商品:{del_name}")
continue

# 修改商品数量
elif operation =="-2":
ifnot cart_names:
print("❌ 购物车为空,暂无商品可修改")
continue
# 随机选择要修改的商品和新数量,实际使用可让用户输入
        modify_index = random.randint(0,len(cart_names)-1)
        modify_name = cart_names[modify_index]
        new_num = random.randint(1,5)
        cart_quantity[modify_index]= new_num  # 列表元素修改:通过索引直接赋值
print(f"📝 已修改商品【{modify_name}】的数量为:{new_num} 件")
continue

# 添加商品
else:
try:
            goods_index =int(operation)-1
# 校验商品编号是否合法
if goods_index <0or goods_index >=len(goods_library):
print("❌ 无效的商品编号,请重新输入")
continue

# 获取商品信息
            add_name = goods_library[goods_index]
            add_price = price_library[goods_index]
            add_num = random.randint(1,3)# 随机生成购买数量,实际可让用户输入

# append方法:在列表末尾添加元素
if add_name in cart_names:# 商品已在购物车,仅修改数量
                exist_index = cart_names.index(add_name)
                cart_quantity[exist_index]+= add_num
print(f"🛒 商品【{add_name}】已在购物车,数量追加 {add_num} 件")
else:# 商品不在购物车,新增条目
                cart_names.append(add_name)
                cart_prices.append(add_price)
                cart_quantity.append(add_num)
print(f"🛒 成功添加商品:{add_name} × {add_num} 件")
            time.sleep(0.5)
except:
print("❌ 输入格式错误,请输入数字指令")
continue

# --- 案例3:列表遍历进阶与排序/统计——购物车结算与整理 ---
print("\n--- 购物车结算清单 ---")
ifnot cart_names:
print("🛒 您的购物车为空,无需结算")
    total_price =0
else:
    total_price =0
# 进阶遍历:enumerate枚举,同时获取元素的索引和值,无需手动计数
print("序号 | 商品名称 | 单价 | 数量 | 小计")
print("-"*50)
for idx,(name, price, num)inenumerate(zip(cart_names, cart_prices, cart_quantity), start=1):
        item_total = price * num
        total_price += item_total
print(f"{idx} | {name:<6} | {price:.1f} 元 | {num:>2} 件 | {item_total:.2f} 元")
print("-"*50)
print(f"🛍️ 本次共选购 {len(cart_names)} 种商品,总计:{total_price:.2f} 元")

# 列表统计与查找方法
print("\n--- 商品统计信息 ---")
# count方法:统计元素出现次数
total_num =sum(cart_quantity)
print(f"本次购买商品总数量:{total_num} 件")

# index方法:查找元素的索引位置
if"牛奶"in cart_names:
    milk_index = cart_names.index("牛奶")
print(f"您购买的牛奶在购物车第 {milk_index+1} 位")

# 列表排序:sort方法,按商品小计金额从高到低排序
print("\n--- 商品金额排序(从高到低)---")
# 组合商品信息并排序
sort_items =sorted(zip(cart_names, cart_prices, cart_quantity), key=lambda x: x[1]*x[2], reverse=True)
for name, price, num in sort_items:
print(f"{name}:{price*num:.2f} 元")

# 列表反转:reverse方法
cart_names.reverse()
print(f"\n购物车商品倒序排列:{cart_names}")

# --- 案例4:嵌套列表——多订单批量管理 ---
print("\n--- 当日多订单批量管理 ---")
# 嵌套列表:列表中的元素也是列表,每个子列表代表一个用户的订单
today_orders =[
["顾客1",["矿泉水","面包"],[2.0,8.0],[2,1],12.0],
["顾客2",["方便面","火腿肠","饮料"],[4.5,3.0,4.0],[3,2,2],27.5],
["顾客3",["牛奶","面包"],[5.5,8.0],[2,2],27.0]
]

# 把当前用户的订单加入当日订单列表
current_order =["当前顾客", cart_names, cart_prices, cart_quantity, total_price]
today_orders.append(current_order)

# 嵌套循环遍历嵌套列表,统计当日营业数据
print(f"今日累计订单数:{len(today_orders)} 单")
day_total =0
for order in today_orders:
    customer_name = order[0]
    order_total = order[4]
    day_total += order_total
print(f"{customer_name} 订单金额:{order_total:.2f} 元")
print(f"💰 今日营业总额:{day_total:.2f} 元")

print(f"\n=== 本次购物结算完成,欢迎下次光临 ===")

4. 代码解释

列表的基础特性

列表是 Python 中最常用的可变序列容器,用[]包裹,元素之间用逗号分隔,支持存储不同类型的数据(字符串、数字、列表等),元素可修改、可重复、有序排列。

索引与切片

  • 索引
    :列表的元素按顺序编号,索引从0开始,通过列表 [索引]可以获取、修改对应位置的元素,反向索引从-1开始(代表最后一个元素)。
  • 切片
    :通过列表 [start:end:step]快速截取列表的子片段,start为起始索引,end为结束索引(不包含),step为步长,省略参数时会使用默认值。

列表核心增删改方法

  • append()
    :在列表的末尾添加一个元素,是最常用的新增方法。
  • pop()
    :根据索引删除列表中的元素,默认删除最后一个元素,同时返回被删除的元素值。
  • remove()
    :根据元素值删除列表中第一个匹配的元素,若元素不存在会报错。
  • insert()
    :在指定索引位置插入一个元素,原位置及后续元素自动后移。
  • 元素修改
    :直接通过列表 [索引] = 新值即可完成对应位置元素的修改。

列表遍历进阶

  • 基础遍历
    :配合range (len (列表))通过索引遍历,适合需要同时操作多个对应列表的场景。
  • 枚举遍历
    :enumerate (列表,start=1)可以同时获取元素的序号和值,无需手动计数,让代码更简洁。
  • zip()
    :可以将多个长度相同的列表打包,同步遍历对应位置的元素,适合多列表关联操作。

列表统计与排序方法

  • index()
    :查找指定元素在列表中第一次出现的索引位置,元素不存在会报错。
  • count()
    :统计指定元素在列表中出现的次数。
  • sort()
    :对列表进行原地排序,默认升序,设置reverse=True可实现降序。
  • sorted()
    :返回一个排序后的新列表,不修改原列表,灵活性更高。
  • reverse()
    :将列表元素原地反转,颠倒排列顺序。

嵌套列表

列表中的元素可以是另一个列表,形成嵌套结构,适合存储二维、结构化的数据(如多订单、表格数据),通过多层索引列表 [一级索引][二级索引]即可获取内层元素,配合嵌套循环可完成遍历与操作。

5. 运行结果示例(由于大量随机数,结果每次不同)

=== 欢迎使用升级版智能自助收银台 ===
当前超市在售商品:
 编号 1:矿泉水,单价 2.0 元
 编号 2:方便面,单价 4.5 元
 编号 3:火腿肠,单价 3.0 元
 编号 4:面包,单价 8.0 元
 编号 5:牛奶,单价 5.5 元
 编号 6:饮料,单价 4.0 元
--------------------------------------------------
今日爆款商品:['矿泉水', '方便面', '火腿肠'],对应单价:[2.0, 4.5, 3.0]
--------------------------------------------------

--- 购物车商品管理 ---
操作说明:输入商品编号添加商品,输入0完成选购,输入-1删除商品,输入-2修改商品数量

您输入的操作指令:2
🛒 成功添加商品:方便面 × 2件

您输入的操作指令:5
🛒 成功添加商品:牛奶 × 1件

您输入的操作指令:2
🛒 商品【方便面】已在购物车,数量追加 1件

您输入的操作指令:-2
📝 已修改商品【方便面】的数量为:4件

您输入的操作指令:0
✅ 选购完成,正在结算...

--- 购物车结算清单 ---
序号 | 商品名称 | 单价 | 数量 | 小计
--------------------------------------------------
1 | 方便面 | 4.5 元 |  4 件 | 18.00 元
2 | 牛奶 | 5.5 元 |  1 件 | 5.50 元
--------------------------------------------------
🛍️ 本次共选购 2 种商品,总计:23.50 元

--- 商品统计信息 ---
本次购买商品总数量:5 件
您购买的牛奶在购物车第 2 位

--- 商品金额排序(从高到低)---
方便面:18.00 元
牛奶:5.50 元

购物车商品倒序排列:['牛奶', '方便面']

--- 当日多订单批量管理 ---
今日累计订单数:4 单
顾客1 订单金额:12.00 元
顾客2 订单金额:27.50 元
顾客3 订单金额:27.00 元
当前顾客 订单金额:23.50 元
💰 今日营业总额:90.00 元

=== 本次购物结算完成,欢迎下次光临 ===

💡 学习建议与课后练习

动手运行

强烈建议你将代码复制到自己的 Python 环境中运行多次,观察列表的增删改方法如何改变列表内容,对比索引遍历和 enumerate 枚举遍历的区别,理解嵌套列表的层级结构。

修改条件

  1. 尝试修改案例 1 中的商品库,新增更多商品与对应单价,观察切片操作的结果变化。
  2. 修改案例 2 中的随机操作逻辑,替换为input()手动输入,实现真正的交互式购物车操作。
  3. 调整案例 3 中的排序规则,将按金额降序改为按商品数量升序,观察排序结果的变化。

小练习

  1. 练习 1
    :基于案例 2 的购物车功能,新增 “清空购物车” 功能,使用列表的clear()方法,当用户输入 - 3 时清空购物车所有商品,并给出提示。
  2. 练习 2
    :编写一个库存管理小程序,创建商品库存列表和对应库存数量列表,使用 for 循环遍历,打印出库存数量小于 5 的商品,并提示需要补货。
  3. 练习 3
    :使用嵌套列表创建一个 3 行 3 列的成绩表,存储 3 名学生的 3 门科目成绩,通过嵌套循环计算每名学生的总分和平均分,以及每门科目的班级平均分。

最新文章

随机文章