Python遍历双列表生成目标列表出错,求正确实现方案
问题分析
你的问题出在错误地用位置配对了current_week和late_pcs——late_pcs的元素是和late_week里的周数一一对应(45对应10,46对应27),而非和current_week的位置直接绑定。用zip_longest遍历会让前3个周(42、43、44)和late_pcs的前2个元素(10、27)配对,剩下的两个周(45、46)只能拿到None,这就是你得到[0,0,0,None,None]的原因。
正确实现方式
最直观高效的做法是先把late_week和late_pcs转换成映射字典,这样可以通过周数快速找到对应的pcs值,再遍历current_week生成目标列表:
current_week = [42,43,44,45,46] late_pcs = [10,27] late_week = [45,46] # 建立周数和pcs的映射字典 late_map = dict(zip(late_week, late_pcs)) # 遍历current_week生成结果 late_list = [late_map.get(week, 0) for week in current_week] print(late_list) # 输出: [0, 0, 0, 10, 27]
解释:
dict(zip(late_week, late_pcs))会生成字典{45:10, 46:27},把周数和对应的pcs值绑定。- 列表推导式里用
late_map.get(week, 0):如果week在字典中存在,就取对应的值;否则返回默认值0,完美匹配你的需求。
如果不想用字典,也可以用循环加条件判断实现(效率稍低,适合小列表):
current_week = [42,43,44,45,46] late_pcs = [10,27] late_week = [45,46] late_list = [] for week in current_week: if week in late_week: # 找到当前周在late_week中的索引,再取对应的late_pcs值 idx = late_week.index(week) late_list.append(late_pcs[idx]) else: late_list.append(0) print(late_list) # 输出: [0, 0, 0, 10, 27]
这种方法每次都要调用late_week.index(week),时间复杂度是O(n),如果late_week很长的话,推荐用第一种字典的方式。
内容的提问来源于stack exchange,提问作者Vitaliy
相关产品推荐
相关产品推荐

