AI编程(八):列表和字典 — 处理”一堆数据”

作者:

购物清单和通讯录,Python最常用的数据结构

前几篇我们学了变量、条件、循环、函数——它们都是处理单个数据的。但真实世界里,数据总是”一堆一堆”的:购物清单上有10样东西,通讯录里存着200个联系人。Python用列表字典来处理这类数据,掌握它们,你才算真正入门。


一、列表(list)— 你的购物清单

想象你去超市前写了一张购物清单:

shopping = ["牛奶", "面包", "鸡蛋", "苹果", "酱油"]

这就是一个列表——用方括号 [] 包裹,元素之间用逗号隔开。列表有三个特点:

  • 有序:第一个是”牛奶”,最后一个是”酱油”,顺序不会变
  • 可重复:可以买两瓶牛奶,["牛奶", "牛奶", "面包"] 完全合法
  • 可修改:随时加东西、删东西、换东西

1.1 增:往清单里加东西

shopping = ["牛奶", "面包", "鸡蛋"]
shopping.append("苹果")          # 在末尾追加
shopping.insert(1, "酸奶")       # 在第2个位置插入
print(shopping)  # ['牛奶', '酸奶', '面包', '鸡蛋', '苹果']

1.2 删:从清单里划掉

shopping.remove("面包")          # 按名字删除
shopping.pop(0)                  # 按位置删除,并返回被删的元素

1.3 改:修改清单

shopping[0] = "脱脂酸奶"         # 把第1项改成脱脂酸奶

1.4 查:看看清单上有什么

print(shopping[0])              # 第1项
print(shopping[-1])             # 最后一项(负数从末尾倒数)
print(len(shopping))            # 清单上有几样东西
print("鸡蛋" in shopping)       # True(有没有鸡蛋?)

1.5 切片:取出清单的一部分

shopping = ["牛奶", "面包", "鸡蛋", "苹果", "酱油"]
print(shopping[1:3])   # ['面包', '鸡蛋'](第2到第3项)
print(shopping[:2])    # ['牛奶', '面包'](前2项)
print(shopping[2:])    # ['鸡蛋', '苹果', '酱油'](第3项到最后)

1.6 遍历:逐项检查清单

shopping = ["牛奶", "面包", "鸡蛋"]
for item in shopping:
    print(f"✅ 已买:{item}")

1.7 列表推导式:批量处理的快捷方式

squares = [x ** 2 for x in range(1, 11)]
print(squares)  # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

big = [x for x in squares if x > 25]  # 筛选:只留大于25的
print(big)      # [36, 49, 64, 81, 100]

一行代码 = 三行循环,这就是推导式的威力。


二、字典(dict)— 你的通讯录

列表用位置找数据(第几个),但通讯录不能靠”第几个联系人”来找人——你得用名字电话。这就是字典:

contacts = {
    "张三": "138-0000-1111",
    "李四": "139-0000-2222",
    "王五": "137-0000-3333"
}

字典用花括号 {} 包裹,每个元素是键:值对(key:value)。

  • 键(key):就像通讯录里的姓名,必须唯一
  • 值(value):就像电话号码,可以是任何数据

2.1 查:打电话给某人

print(contacts["张三"])               # 138-0000-1111
print(contacts.get("赵六", "未找到"))  # 未找到(避免报错)

2.2 增:新存一个号码

contacts["赵六"] = "136-0000-4444"

2.3 改:号码换了

contacts["张三"] = "138-9999-1111"   # 直接赋值就是修改

2.4 删:删除联系人

del contacts["李四"]

2.5 遍历:打印所有联系人

for name, phone in contacts.items():
    print(f"📱 {name}: {phone}")

三、列表 vs 字典:一张表看清区别

特性 列表(list) 字典(dict)

|——|————-|————-|

语法 ["a", "b", "c"] {"name": "张三"}
访问方式 位置索引 list[0] 查找 dict["name"]
有序性 ✅ 有序 ✅ 3.7+ 保持插入顺序
是否可重复 ✅ 元素可重复 ❌ 键必须唯一
适用场景 一组同类数据(购物清单) 键值映射(通讯录、配置)
增删改查 append/remove/pop/[i] d[key]=val / del / .get()

简单记法:要”排队”用列表,要”查字典”用字典。


四、实战:通讯录管理程序

把列表和字典结合起来,写一个真正能用的通讯录:

contacts = {}

while True:
    print("n===== 通讯录 =====")
    print("1. 添加联系人  2. 查找联系人")
    print("3. 删除联系人  4. 显示全部  5. 退出")

    choice = input("请选择操作 (1-5): ")

    if choice == "1":
        name = input("姓名: ")
        phone = input("电话: ")
        contacts[name] = phone
        print(f"✅ 已添加 {name}")

    elif choice == "2":
        name = input("请输入要查找的姓名: ")
        if name in contacts:
            print(f"📱 {name}: {contacts[name]}")
        else:
            print("❌ 未找到该联系人")

    elif choice == "3":
        name = input("请输入要删除的姓名: ")
        if name in contacts:
            del contacts[name]
            print(f"✅ 已删除 {name}")
        else:
            print("❌ 未找到该联系人")

    elif choice == "4":
        if not contacts:
            print("📭 通讯录为空")
        else:
            for name, phone in contacts.items():
                print(f"  📱 {name}: {phone}")

    elif choice == "5":
        print("👋 再见!")
        break

这个小程序虽然只有30多行,但已经是一个完整的应用:用字典存储、用循环持续运行、用条件处理不同操作。这正是编程的魅力——把简单的积木搭出复杂的东西。


五、本篇小结

  • 列表是有序的数据集合,适合存”一堆东西”
  • 字典是键值对的数据集合,适合存”需要按名字查找的信息”
  • 列表用位置访问,字典用键访问
  • 两者都可以增删改查和遍历
  • 列表推导式是快速创建列表的简洁语法

下篇预告

数据存到列表和字典里了,但程序一关数据就没了。下一篇《AI编程(九):文件操作 — 让数据”活”下来》,我们将学习如何把数据写入文件、从文件读取数据,让通讯录的内容在程序关闭后依然保留。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注