python – 理解列表理解
我最近被介绍列出理解,然而,我不确定我完全理解它们.
所以,我通过文档和谷歌进行了快速搜索. https://docs.python.org/2/tutorial/datastructures.html 虽然这给了我一个关于它们如何工作的想法,但我称之为奇怪,我希望对它们如何运作有一个更成熟的理解. 以下是文档中的示例: >>>[(x,y) for x in [1,2,3] for y in [3,1,4] if x != y] [(1,3),(1,4),(2,1),(3,4)] 如果我错了,请纠正我,但这就是我理解列表如何评估的方式. >看起来列表理解从左到右进行评估. 如果我的理解不正确,请纠正我. 解决方法
嵌套列表推导没有什么神奇之处.我想你还没有看到他们的简约!
这个: # X A B C a = [(x,y) for x in [1,3] for y in [3,4] if x != y] 只是语法糖: __tmp = [] for x in [1,3]: # A for y in [3,4]: # B if x != y: # C __tmp.append((x,y)) # X a = __tmp 所以你把for … in …部分重新组装成嵌套for循环.然后取出ifs并将其嵌套在相应的for循环中;最后,你取第一部分(在这种情况下是(x,y))并嵌套在嵌套for结构的最深处. 当ifs出现在列表推导中的多个“阶段”时,这也很好,例如: # X A B C D a = [(x,3] if x >= 2 for y in [3,4] if x != y] 将(desugars)翻译成: __tmp = [] for x in [1,3]: # A if x >= 2: # B for y in [3,4]: # C if x != y: # D __tmp.append((x,y)) # X a = __tmp 再一次……它与在部件之间散布的冒号的理解完全相同,并且内部部分正好在前面. A B C D …部分的顺序始终相同且永不改变;它只是X部分从后面移动到前面. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |