You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检查待办列表中是否存在指定任务名(列表元素为元组)

修复Python待办列表的任务名重复判断问题

问题根源

原代码中if name in ToDoList的逻辑无效,因为ToDoList的元素是(name, date)格式的元组,直接判断字符串name是否在列表里,本质是检查是否有元组等于这个字符串,显然永远不会成立。

解决方案

要判断任务名是否重复,需要遍历列表中的每个元组,提取元组的第一个元素(即任务名)进行对比。可以用any()函数简洁实现这个检查:

any(task[0] == name for task in ToDoList)

同时注意代码里的另一个错误:ToDoList = ToDoList.append(task)这行是错误的,因为list.append()是原地修改列表,返回值为None,这样会把ToDoList覆盖成None,后续调用sort()会抛出异常,应该直接调用ToDoList.append(task)。

修改后的完整代码

from datetime import datetime
ToDoList = []
date_format = "%Y/%m/%d %H:%M:%S"


def addNewItems():
    global ToDoList
    # 获取当前时间,放在循环内确保每次添加任务时的时间都是最新的
    current_time = datetime.now()
    
    while True:
        name = input("Please enter your task name: ")
        # 检查任务名是否已存在
        if any(task[0] == name for task in ToDoList):
            print("Task already exists! Select the options again.")
        else:
            break
    
    while True:
        date_input = input("Please enter your task completion date as yyyy/mm/dd HH:MM:SS: ")
        try:
            date = datetime.strptime(date_input, date_format)
            if date < current_time:
                print("Time entered is in the past! Select the options again")
            else:
                break
        except ValueError:
            print("Invalid date format! Please follow yyyy/mm/dd HH:MM:SS.")
    
    task = (name, date)
    ToDoList.append(task)
    # 按任务截止日期排序
    ToDoList.sort(key=lambda x: x[1])
    print("Task added successfully!")

额外优化说明

  1. 把current_time的获取放到函数内循环前,确保每次添加任务时的当前时间是最新的,避免程序运行很久后时间判断失效。
  2. 给日期输入添加了try-except捕获格式错误,避免用户输入不符合要求的日期时程序崩溃。
  3. 排序时指定key=lambda x: x[1],按任务的截止日期排序,比默认的元组排序(先按任务名字母序,再按日期)更符合待办列表的需求。

内容的提问来源于stack exchange,提问作者user20006707

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 22:10:27