我试图编写以下列表理解:
[writer for writer in writerList if problem in writer.solutions for problem in [1,2,3]]
列表理解试图执行以下操作:
但是,使用上面的列表理解我被告知在赋值之前引用了局部变量problem
。
我想我缺乏对如何进行这种双列表理解的基本理解,其中if依赖于第二种理解。我很感激任何关于这个问题的光芒!
答案 0 :(得分:1)
试试这样:
[writer for writer in writerList for problem in [1,2,3] if problem in writer.solutions]
答案 1 :(得分:0)
如果sets
和writer.solutions
中的项目是可清除的,则可以使用problems
来优化和简化此特定问题(您在示例中提供的整数是可哈希的,可变项目,如字典和列表不是。
problems = set([1, 2, 3])
writers = [writer for writer in writerList if not problems.difference(writer.solutions)]
set.difference(other)
将返回集合中不在另一个中的项目。因此,如果问题集中的所有项都在writer.solutions
中,它将返回一个空集,其值为False(因此为not set.difference()
)。