Python:双列表理解中的If语句

2024-10-04 03:25:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图写下以下清单理解:

[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]中的所有项也出现在作家.解决方案,以作者为例。否则,丢弃作者。在

然而,使用上面的列表理解,我被告知局部变量problem在赋值之前被引用。在

我想我缺乏一个基本的理解,如何做这种双重列表的理解,其中if依赖于第二个理解。我会很感激在这个问题上有任何亮光!在


Tags: 项目in列表forif作者数组解决方案
2条回答

如果writer.solutions和{}中的项是可散列的(您在示例中提供的整数是可散列的,比如字典和列表,则可以使用sets来优化和简化这个特定的问题。在

problems = set([1, 2, 3])
writers = [writer for writer in writerList if not problems.difference(writer.solutions)]

^{}将返回集合中不在另一个集合中的项。因此,如果问题集中的所有项目都在writer.solutions中,那么它将返回一个空集,其计算结果为False(因此not set.difference())。在

试着这样做:

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

相关问题 更多 >