Python · Day 07

列表查询、排序
与任务管理器

第七天,我继续学习列表。列表不只能保存内容,还可以查询、插入、排序和统计,让一组数据真正参与程序的判断与处理。

使用 in 查询列表

if search in subjects 会判断输入的内容是否存在于列表中。输入“Python”时能够找到,输入尚未加入列表的“物理”时则找不到。

day7.py
subjects = ["语文", "数学", "英语", "Python"]
search = input("请输入要查找的科目:")

if search in subjects:
    print("找到了")
else:
    print("没找到")

if ... in ... 用来判断某项内容是否存在;for ... in ... 则是依次取出列表中的每一项。相同的 in 要结合整句话理解。

在指定位置插入内容

append() 把内容放在末尾,而 insert(位置, 内容) 可以指定插入位置。原位置及后面的内容会依次向后移动。

day7.py
subjects.insert(1, "物理")
print(subjects)

search = input("请输入要查找的科目:")

if search in subjects:
    print("找到了")

把插入操作放到查询之前,输入“物理”才能找到。这个调整让我看到:每一行单独写对还不够,代码的执行顺序同样会改变结果。

使用 sort() 排序

sort() 会直接改变原来的列表。默认从小到大排列,加入 reverse=True 后则从大到小排列。

day7.py
scores = [88, 72, 95, 60, 83]

scores.sort()
print("从小到大:", scores)

scores.sort(reverse=True)
print("从大到小:", scores)

程序先输出 [60, 72, 83, 88, 95],再输出 [95, 88, 83, 72, 60]。中文排序依据字符编码,目前不必把它理解为拼音排序。

使用 count() 统计次数

count() 会返回某个内容在列表中出现了多少次。如果完全没有出现,结果是 0,而不是报错。

day7.py
practice_records = [
    "Python", "数学", "Python",
    "英语", "Python"
]

python_count = practice_records.count("Python")
print("Python 出现了", python_count, "次")

列表中有三个“Python”,所以程序正确输出了 3。

学习任务管理器

最后,我把查询、统计、添加、排序、遍历和长度统计组合起来:已有任务显示出现次数,新任务则自动加入清单。

task_manager.py
tasks = [
    "背单词", "复习数学",
    "练习Python", "背单词"
]

search = input("请输入要查找的任务:")

if search in tasks:
    task_count = tasks.count(search)
    print("找到,这项任务出现了", task_count, "次")
else:
    tasks.append(search)
    print("没找到,已加入任务清单")

tasks.sort()

for task in tasks:
    print("-", task)

print("一共有", len(tasks), "项任务")

查询“背单词”时,程序统计出它出现 2 次;重新运行并查询“整理错题”时,程序将其加入清单,总数变成 5。

程序每次重新运行都会从代码中的初始列表开始。要让新增任务永久保存,需要以后学习文件读写。

今天真正弄懂了什么

  • in 可以判断内容是否存在于列表中
  • insert() 可以在指定位置添加内容
  • 代码执行顺序会影响查询结果
  • sort() 会直接修改列表的排列顺序
  • reverse=True 可以开启反向排序
  • count() 可以统计内容出现次数
  • 查询、判断和列表操作可以组合成实用的小程序

今天不只是继续记忆列表方法,而是第一次根据“找到”或“没找到”的不同情况,让程序主动选择统计或添加操作。