小编典典

Python中的递归列表理解?

python

是否可以在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

这样有可能吗?


阅读 186

收藏
2020-12-20

共1个答案

小编典典

不,没有(记录,可靠,稳定,… ;-)引用“当前理解”的方法。您可以只使用一个循环:

res = []
for x in nums:
  if x not in res:
    res.append(x)

当然,这是非常昂贵的(O(N平方)),因此您可以使用辅助工具对其进行优化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]'(故意选择不是有效的标识符;-)是“实现工件”的顶点,任何依赖于它的代码都应摆脱困境;-) 。

2020-12-20