Поиск наборов в списке наборов, которые являются подмножествами и выбор их - PullRequest
0 голосов
/ 13 ноября 2018

Я хотел бы выбрать только те наборы из списка наборов, которые являются подмножествами другого набора, так что, по сути, это так:

sets = [{1, 2, 3}, {6, 7, 8}]
s = {1, 2, 3, 4, 5, 6, 7}
list(compress(sets, [sub <= s for sub in sets]))

Это работает, но сначала неправильно оценивать понимание списка, а затем -используя компресс.Есть ли способ индексировать наборы напрямую, например:

sets[[sub <= s for sub in sets]] ### This does not work!

1 Ответ

0 голосов
/ 13 ноября 2018

Попробуйте:

[i for i in sets if all(j in s for j in i)]

Тест:

In [226]: sets = [{1, 2, 3}, {6, 7, 8}, {1,2}, {3}, {7,1}, {7,8}, {8}]
In [227]: s = {1, 2, 3, 4, 5, 6, 7}

In [228]: [i for i in sets if all(j in s for j in i)]
Out[228]: [{1, 2, 3}, {1, 2}, {3}, {1, 7}]
...