是否可以在Python中定义递归列表理解?
可能是一个简单的示例,但类似于:
nums = [1, 1, 2, 2, 3, 3, 4, 4] willThisWork = [x for x in nums if x not in self] # self being the current comprehension
这样有可能吗?
不,没有(记录,可靠,稳定,… ;-)引用“当前理解”的方法。您可以只使用一个循环:
res = [] for x in nums: if x not in res: res.append(x)
当然,这是非常昂贵的(O(N平方)),因此您可以使用辅助工具对其进行优化set(我假设将项目的顺序与中的项目顺序保持res一致nums,否则set(nums)可以做到;-)。 ..:
set
res
nums
set(nums)
res = [] aux = set() for x in nums: if x not in aux: res.append(x) aux.add(x)
对于非常长的列表(O(N)而不是N平方),这要快得多。
编辑 :在Python 2.5或2.6中,vars()['_[1]']可能实际上可以以您想要的角色工作self(对于非嵌套listcomp)…这就是为什么我通过澄清没有 记录,可靠,稳定的 方式访问“列表”来限定我的陈述的原因” –特殊的,未记录的“名称” '_[1]'(故意选择不是有效的标识符;-)是“实现工件”的顶点,任何依赖于它的代码都应摆脱困境;-) 。
vars()['_[1]']
self
'_[1]'