<p>编辑(原文如下):</p>
<p>现在,我可能会更好地理解你(感谢<a href="https://stackoverflow.com/users/10255652/vash-the-stampede">@vash_the_stampede</a>的澄清评论)。这种方法嵌套了几个循环来比较列表列表中的每个列表,并确定其中一个列表是否是另一个列表的子集。然后,如果比较列表是超集/子集,它将创建一个元组的输出列表,每个元组包含两个比较列表的索引,这两个比较列表的索引顺序最长,并且这些比较列表的长度不同。你知道吗</p>
<p>重要提示:这种方法不比较列表顺序,因此它可以提供您可能不想要的输出,例如<code>[1,2,4,5]</code>是长度差为1的<code>[1,2,3,4,5]</code>的子集。或者,具体到您的示例,与示例输出相比,这种方法会输出一个额外的元组,因为索引8处的<code>[3,4,5,6]</code>是索引4处的<code>[2,3,4,5,6,7,8]</code>的子集,长度相差3。我认为来自<a href="https://stackoverflow.com/users/487339/dsm">@DSM</a>的答案处理了这个问题,因此它可能更接近您的需要。你知道吗</p>
<p>当前数据集的输出示例:</p>
<pre><code>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)]
</code></pre>
<p>原件:</p>
<p>如果我理解正确,那么您可以嵌套几个循环来比较列表列表中的每个列表。然后,创建一个元组输出列表,每个元组包含两个比较列表的索引以及这些比较列表的长度差异。例如:</p>
<pre><code>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)]
</code></pre>