Skip to main content
 首页 » 编程设计

Python List-comprehension 和多次引用一个对象

2025年05月04日12xing901022

这是一个人为的示例,用于演示在 for 循环和列表推导中多次引用相同的字典项。首先,for 循环:

dict_index_mylists = {0:['a', 'b', 'c'], 1:['b', 'c', 'a'], 2:['c', 'a', 'b']} 
 
# for-loop 
myseq = [] 
for i in [0, 1, 2]: 
    interim = dict_index_mylists[i] 
    if interim[0] == 'b' or interim[1] == 'c' or interim[2] == 'a':     
        myseq.append(interim) 

在 for 循环中,临时列表从字典对象中引用,然后在 if 条件中多次引用这可能有意义,尤其是在字典非常大和/或存储时。再一次,“临时”引用可能是不必要的,因为 Python 字典针对性能进行了优化。

这是for循环的列表理解:

# list-comprehension 
myseq = [dict_index_mylists[i] for i in [0, 1, 2] if dict_index_mylists[i][0] == 'b' or dict_index_mylists[i][1] == 'c' or dict_index_mylists[i][2] == 'a'] 

问题是:

一个。列表理解是对字典项进行多次引用,还是引用并保留一个本地“临时”列表以供处理?

在同一字典项上包含多个条件且字典非常大的情况下,最佳列表理解表达式是什么?

请您参考如下方法:

您似乎只询问常见子表达式的优化。在您的列表理解中,它将多次索引到字典中。 Python 是动态的,很难知道像 dict_index_mylists[i] 这样的操作可能会产生什么副作用,因此 CPython 只是简单地执行您告诉它的次数。

PyPy 等其他实现使用 JIT 并可能优化掉子表达式,但很难确定它会提前做什么。

如果您非常在意性能,则需要对各种选项进行计时以查看哪个最佳。