考虑以下代码:
a = [... for i in input]
i = a.index(f(a))
我想知道我是否可以做单线。明显的尝试是:
i = [... for i in input].index(f([... for i in input]))
但是这个解决方案需要列表生成两次。 不太明显的尝试是:
i = [ a.index(f(a)) for a in [[... for i in input],] ]
虽然可以解决问题,但会使代码变得很奇怪。
这让我想到,可能有可能以某种方式在其自己的方法调用中使用由列表推导生成的列表。类似的东西(显然都不起作用):
i = [... for i in input].index(f(_))
# or
i = [... for i in input].index(f(self))
可以吗?
最佳答案
在执行递归任务时,根据函数的作用,您可以将函数与列表理解或生成器表达式混合使用。
例如考虑以下代码:
>>> f=lambda x:next(i for i in x if i.startswith('a'))
>>>
>>> a=['df','sr','t','aaf','ar','trf']
>>> a.index(f(a))
3
您可以使用 enumerate
进行如下混合:
>>> next(i for i,j in enumerate(a) if j.startswith('a'))
3
所以这一切都基于你的函数,你如何将它的结构放在列表理解或生成器表达式中,然后对其应用一些更改并根据你的需要使用 python 工具(在在这种情况下,我们使用了 enumerate
)。
关于python - 可以在其方法中使用列表理解派生吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30126549/