РЕДАКТИРОВАТЬ (оригинал ниже):
Теперь, возможно, я вас лучше понимаю (спасибо @ vash_the_stampede за разъясняющий комментарий).Этот подход вкладывает пару циклов, чтобы сравнить каждый список в вашем списке списков и определить, является ли один подмножеством другого.Затем, если сравниваемые списки являются надмножеством / подмножеством, он создает выходной список кортежей, каждый из которых содержит индексы двух сравниваемых списков, упорядоченных по длине в первую очередь вместе с разницей в длине этих сравниваемых списков.
ВАЖНО: этоПодход не сравнивает порядок списка, поэтому он может обеспечить вывод, который вам может не понадобиться, например, [1,2,4,5]
является подмножеством [1,2,3,4,5]
с разницей длины 1. Или, в зависимости от вашего примера, этот подход выводит дополнительный кортеж при сравнениик вашему примеру вывода, потому что [3,4,5,6]
, в индексе 8, является подмножеством [2,3,4,5,6,7,8]
, в индексе 4, с разницей длины 3. Я думаю, что ответ от @ DSM решает эту проблему,так что это, вероятно, ближе к тому, что вам нужно.
Пример вывода из вашего текущего набора данных:
a = [[1,2,3,4,5], [4,5,6,7,8], [1,2,3,4], [4,5,6,7,8,9], [2,3,4,5,6,7,8], [6,7,8,9], [5,6,7,8,9], [2,3,4,5,6], [3,4,5,6], [11,12,13,14,15], [13,14,15]]
output = []
for i in range(len(a)):
for j in range(i + 1, len(a)):
if set(a[i]).issubset(a[j]) or set(a[i]).issuperset(a[j]):
diff = abs(len(a[i]) - len(a[j]))
if len(a[i]) > len(a[j]):
output.append((i, j, diff))
else:
output.append((j, i, diff))
print(output)
# OUTPUT
# [(0, 2, 1), (3, 1, 1), (4, 1, 2), (3, 5, 2), (3, 6, 1), (4, 7, 2), (4, 8, 3), (6, 5, 1), (7, 8, 1), (9, 10, 2)]
ОРИГИНАЛ:
Если я вас правильно понимаю, вы можете просто вложить пару циклов для сравнения каждого спискав вашем списке списков.Затем создайте выходной список кортежей, каждый из которых содержит индексы двух сравниваемых списков вместе с разницей в длине этих сравниваемых списков.Например:
a = [[1,2,3,4,5], [4,5,6,7,8], [1,2,3,4], [4,5,6,7,8,9], [2,3,4,5,6,7,8], [6,7,8,9], [5,6,7,8,9], [2,3,4,5,6], [3,4,5,6], [11,12,13,14,15], [13,14,15]]
output = []
for i in range(len(a)):
for j in range(i + 1, len(a)):
diff = abs(len(a[i]) - len(a[j]))
output.append((i, j, diff))
print(output)
# OUTPUT
# [(0, 1, 0), (0, 2, 1), (0, 3, 1), (0, 4, 2), (0, 5, 1), (0, 6, 0), (0, 7, 0), (0, 8, 1), (0, 9, 0), (0, 10, 2), (1, 2, 1), (1, 3, 1), (1, 4, 2), (1, 5, 1), (1, 6, 0), (1, 7, 0), (1, 8, 1), (1, 9, 0), (1, 10, 2), (2, 3, 2), (2, 4, 3), (2, 5, 0), (2, 6, 1), (2, 7, 1), (2, 8, 0), (2, 9, 1), (2, 10, 1), (3, 4, 1), (3, 5, 2), (3, 6, 1), (3, 7, 1), (3, 8, 2), (3, 9, 1), (3, 10, 3), (4, 5, 3), (4, 6, 2), (4, 7, 2), (4, 8, 3), (4, 9, 2), (4, 10, 4), (5, 6, 1), (5, 7, 1), (5, 8, 0), (5, 9, 1), (5, 10, 1), (6, 7, 0), (6, 8, 1), (6, 9, 0), (6, 10, 2), (7, 8, 1), (7, 9, 0), (7, 10, 2), (8, 9, 1), (8, 10, 1), (9, 10, 2)]