最近,我对 SO 进行了讨论(请参阅上下文),内容涉及以下两段代码:
res = [d.get(next((k for k in d if k in s), None), s) for s in lst]
Run Code Online (Sandbox Code Playgroud)
和:
res = [next((v for k,v in d.items() if k in s), s) for s in lst]
Run Code Online (Sandbox Code Playgroud)
两者都迭代s列表中的字符串并在 dict 中lst查找。如果找到,则返回关联值,否则返回。我很确定第二段代码比第一段更快,因为(对于每个)字典中没有查找,只是对(键,值)对进行迭代。sdsss
问题是: 如何检查这是否真的发生在幕后?
我第一次尝试该dis模块,但结果令人失望(python 3.6.3):
>>> dis.dis("[d.get(next((k for k in d if k in s), None), s) for s in lst]")
1 0 LOAD_CONST 0 (<code object <listcomp> …Run Code Online (Sandbox Code Playgroud)