Python: оператор if в понимании двойного списка

Я пытаюсь написать следующее понимание списка:

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

Понимание списка пытается выполнить следующее:

  1. Просмотрите каждого писателя в журнале писателя
  2. Просмотрите каждый элемент в массиве [1,2,3]
  3. Если все элементы в массиве [1,2,3] также присутствуют в writer.solutions, рассмотрите автора. Иначе, отбросьте писателя.

Однако, используя приведенное выше представление списка, мне говорят, что problem локальной переменной ссылается перед назначением.

Я полагаю, что мне не хватает фундаментального понимания того, как сделать такое понимание двойного списка, где if полагается на второе понимание. Я был бы признателен за любой свет, освещенный в этом вопросе!

Эта конкретная проблема может быть оптимизирована и упрощена с помощью 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() ).

Попробуйте вот так:

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