Вы можете преобразовать подсписки в a
в наборы и отсортировать их по длине в обратном порядке, чтобы вы могли перебирать их и добавлять каждый набор к выходным данным, только если он не является подмножеством какого-либо изсуществующие наборы в выходных данных:
output = []
for candidate in sorted(map(set, a), key=len, reverse=True):
if not any(candidate <= incumbent for incumbent in output):
output.append(candidate)
list(map(list, output))
возвращает:
[[2, 3, 4], [1, 4, 5]]
Наборы неупорядочены, поэтому, если важны исходные порядки элементов в подсписках, выможет использовать тот факт, что ключи dict упорядочены начиная с Python 3.7, и вместо этого сопоставить подсписки с ключами dict:
output = []
for candidate in sorted(map(dict.fromkeys, a), key=len, reverse=True):
if not any(candidate.keys() <= incumbent.keys() for incumbent in output):
output.append(candidate)
, так что list(map(list, output))
возвращает:
[[2, 3, 4], [1, 5, 4]]
Если вы используете Python 3.6 или более ранние версии, где порядок ключей dict не гарантирован, вы можете использовать collections.OrderedDict
вместо dict.