Python:if双列表解析中的语句

时间:2016-01-30 00:57:03

标签: python list list-comprehension

我试图编写以下列表理解:

[writer for writer in writerList if problem in writer.solutions for problem in [1,2,3]]

列表理解试图执行以下操作:

  1. 查看writerList中的每个作家
  2. 查看数组中的每个项目[1,2,3]
  3. 如果数组[1,2,3]中的所有项目也存在于writer.solutions中,请考虑编写者。否则,丢弃作家。
  4. 但是,使用上面的列表理解我被告知在赋值之前引用了局部变量problem

    我想我缺乏对如何进行这种双列表理解的基本理解,其中if依赖于第二种理解。我很感激任何关于这个问题的光芒!

2 个答案:

答案 0 :(得分:1)

试试这样:

[writer for writer in writerList  for problem in [1,2,3] if problem in writer.solutions]

答案 1 :(得分:0)

如果setswriter.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())。