如何避免使用for循环向列表追加字典对应值?(附示例场景)
更高效的替代实现方式
当然有啦!Python里有好几种更简洁高效的方式来实现这个需求,而且性能通常比显式的for循环+append更好,下面给你列举几个常用的方案:
列表推导式(创建新列表)
如果你可以直接生成新的List2,列表推导式是最直观的选择——Python对列表推导式做了专门的底层优化,比手动循环append要快不少:Dict = {"a": 1, "b": 2, "c": 3} List1 = ["a", "c"] List2 = [0] + [Dict[e] for e in List1] # 最终结果: [0, 1, 3]extend + 生成器表达式(原地修改原列表)
如果需要在原List2的基础上扩展元素,用extend搭配生成器表达式会比逐个append更高效。生成器不需要提前创建完整的中间列表,内存占用更低:List2 = [0] List2.extend(Dict[e] for e in List1) # 最终结果: [0, 1, 3]map + extend(简洁的原地修改方案)
利用map函数把List1的每个元素直接映射为字典对应的值,再用extend批量添加到List2中,代码会更简洁:List2 = [0] List2.extend(map(Dict.get, List1)) # 最终结果: [0, 1, 3]
额外补充:这些方案的核心优势是把循环逻辑交给了Python的底层C实现(而非Python层面的解释型循环),所以在处理大规模数据时,性能提升会非常明显。另外,如果List1里可能存在字典中没有的键,Dict.get还可以指定默认值(比如map(lambda x: Dict.get(x, 0), List1)),容错性更强。
内容的提问来源于stack exchange,提问作者Ewdlam
相关产品推荐
相关产品推荐

