如何使用2D list替换投票系统中并行列表关联的实现方法
双列表关联结构转二维列表实现方案
基础转换方法
你现有两个关联列表的样例一般如下:
# 原有实现 names = ["候选人A", "候选人B", "候选人C"] votes = [15, 22, 9]
直接通过列表推导式搭配zip即可合并为符合要求的二维列表,每个子列表固定存储「候选人姓名、得票数」两个元素:
# 转换为二维列表实现 candidates = [[name, vote] for name, vote in zip(names, votes)]
转换后你可以直接通过candidates[i][0]取索引为i的候选人姓名,candidates[i][1]取对应得票数,和原有索引匹配逻辑完全兼容,不需要修改原有业务的索引遍历逻辑。
常用操作适配
替换为二维列表后,原有投票相关操作的写法可以简化,同时避免两个列表长度不一致导致的关联错误:
- 新增候选人:直接插入单条二维元素即可,不需要同时操作两个列表
# 原有写法 names.append("候选人D") votes.append(0) # 二维列表写法 candidates.append(["候选人D", 0]) - 给指定候选人加票
target_name = "候选人B" # 写法1:遍历匹配修改 for item in candidates: if item[0] == target_name: item[1] += 1 break # 写法2:索引匹配修改,和原有逻辑兼容 idx = [x[0] for x in candidates].index(target_name) candidates[idx][1] +=1 - 得票排序:直接基于二维列表的得票字段排序,不需要额外处理关联关系
# 按得票数从高到低排序 candidates.sort(key=lambda x: x[1], reverse=True)
注意事项
请固定二维列表中子元素的顺序,统一约定第0位为姓名、第1位为得票数,避免后续取值出现顺序混淆问题
内容的提问来源于stack exchange,提问作者Omar El Gendy
相关产品推荐
相关产品推荐

