Python实现:将列表中重复用户的任务数合并同步至对应位置
实现方法及优化建议
基础实现步骤
要解决这个问题,核心是先统计每个用户的总任务数,再将总任务数同步到该用户所有的对应位置。具体分两步:
统计每个用户的总任务数
遍历用户列表和任务数列表的配对,用字典记录每个用户的累计任务数:users = ['David','David','Noah','Jenny'] tasksCompleted = [5,5,4,6] # 初始化字典存储用户总任务数 user_total_tasks = {} # 遍历用户和对应任务数 for user, task in zip(users, tasksCompleted): if user in user_total_tasks: # 用户已存在,累加任务数 user_total_tasks[user] += task else: # 用户首次出现,初始化任务数 user_total_tasks[user] = task执行后
user_total_tasks会是{'David': 10, 'Noah': 4, 'Jenny': 6}。生成同步后的结果列表
再次遍历原用户列表,将每个位置替换为该用户的总任务数:desiredOutput = [user_total_tasks[user] for user in users] print(desiredOutput) # 输出: [10,10,4,6]
简化优化(进阶)
如果想让代码更简洁,可以用collections.defaultdict来简化字典的累加逻辑,不需要判断用户是否存在:
from collections import defaultdict user_total_tasks = defaultdict(int) for user, task in zip(users, tasksCompleted): user_total_tasks[user] += task desiredOutput = [user_total_tasks[user] for user in users]
defaultdict(int)会自动给不存在的键初始化值为0,省去了手动判断的步骤,适合处理这类累加场景。
额外建议
- 参数校验:如果程序需要处理用户输入的列表,可以先校验两个列表长度是否一致,避免出错:
assert len(users) == len(tasksCompleted), "用户列表和任务数列表长度必须相同" - 可读性:给变量起清晰的名字(比如
user_total_tasks而不是d),方便自己和他人理解代码。
内容的提问来源于stack exchange,提问作者lxlGhostlylxl
相关产品推荐
相关产品推荐

