конфликтующие случаи в списках python - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть два списка наборов -

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 голосов
/ 13 ноября 2018

Вы можете использовать следующее понимание списка:

[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}
0 голосов
/ 13 ноября 2018
result = [i for i in decision if not [j for j in attribute if i.issubset(j)]]

результат - список всех наборов, которые не являются подмножеством атрибутов. :)

Это компактная версия:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...