我正在尝试编写以下列表推导式:
[writer for writer in writerList if problem in writer.solutions for problem in [1,2,3]]
列表推导式尝试执行以下操作:
- 查看writerList中的每个writer
- 查看数组[1,2,3]中的每个项
- 如果数组[1,2,3]中的所有项也存在于writer.solutions中,则考虑该writer。否则,舍弃该writer。
我猜我缺乏如何执行这种依赖第二个推导式的if语句的基础理解。我们将不胜感激!
problem
实例应该是writer
。 - mhlester[writer for writer in writerList for problem in [1,2,3] if problem in writer.solutions ]
- styvanemap
函数来使用lambda
表达式,那么你会失去速度和简洁性;永远不要这样做。你可以很容易地用[w for w in winterList if all(s in (1, 2, 3) for s in w.solutions)]
来表达,这实际上更短,并且通常更快。如果你使用了C内置函数并且w.solutions
很大,你甚至可以获得(稍微)更高的性能,但是当你需要引用特殊方法时,它看起来很丑陋:[w for w in winterList if all(map((1, 2, 3).__contains__, w.solutions))]
。 - ShadowRanger