python列表中的冲突情况

时间:2018-11-13 00:18:48

标签: python-3.x nested-lists

我有两个集合列表-

attribute = [{0, 1, 2, 3, 6, 7}, {4, 5}]

decision = [{0, 1, 2}, {3, 4}, {5}, {6, 7}]

我想要-

{3, 4}

在这里,{3, 4}有冲突,因为它既不是{0, 1, 2, 3, 6, 7}的子集,也不是{4, 5}的子集。

我的代码-

 check = []
 for i in attribute:
      for j in decision:
          if j.issubset(i):
              check.append(j)
 print(check)

 for x in decision:
     if not x in check:
         temp = x

 print(temp)

这给了我{3, 4},但是有没有更简单(和/或)更快的方法呢?

2 个答案:

答案 0 :(得分:2)

您可以使用以下列表理解:

[d for d in decision if not any(d <= a for a in attribute)]

这将返回:

[{3, 4}]

如果只希望第一个满足条件的集合,则可以将next与生成器表达式一起使用:

next(d for d in decision if not any(d <= a for a in attribute))

这将返回:

{3, 4}

答案 1 :(得分:1)

result = [i for i in decision if not [j for j in attribute if i.issubset(j)]]

result是所有集合的列表,它们不是属性的子集。 :)

这是的精简版本:

result = []
for i in decision:
    tmp_list = []
    for j in attribute:
        if i.issubset(j):
            tmp_list.append(j)
    if not tmp_list:
        result.append(i)