比较两个列表列表中的元素时查找较小的子集

时间:2018-01-24 09:23:25

标签: python python-2.7

很抱歉,如果这很复杂,但我会尽力解释这个问题。我有两个列表列表,它们具有相同数量的元素,但以不同的方式组织,例如:

a = [1],[2,3,4],[5,6],[7,8,9],[10,11,12,13]
b = [1,2,3,4],[5,6],[7,8,9],[10,11,12],[13]

我试图1)找到两个列表列表之间的不同列表,2)对于每个不同的列表,找到较小子集的长度。因此,对于列表a,[1]和[2,3,4]是b中[1,2,3,4]的子集 - 因此,[1]是较小的子集,其长度为1。

我可以通过以下方式为a和b创建不同列表的列表:

matches = [x for x in a if x in b]
adiff = [x for x in a if x not in matches]
bdiff = [x for x in b if x not in matches]

但是,我似乎无法进入第2部分。这在python中是否可行?

编辑:抱歉,b中的列表应为[5,6]。因此,当a与b进行比较时,a的期望输出为1,假设[1]的长度为1.当b与a进行比较时,所需的输出也为1,因为[13]的长度也是1。

1 个答案:

答案 0 :(得分:3)

由于您正在将这些列表列表视为集合,但是对于看似不重要的顺序以及关于子集等,可能有助于将这些列表实际转换为集合集(或实际上<table align="center"> <thead> <tr> <th>No.</th> <th colspan="3">Types</th> <th>Remark</th> </tr> <tr> <th></th> <th>A</th> <th>B</th> <th>C</th> <th></th> </tr> </thead> <tbody> <tr> <td>1</td> <td>Data1</td> <td>Data2</td> <td>Data3</td> <td>Ok</td> </tr> </tbody> </table> { {1}})。然后,您可以使用setfrozensetset&^操作来查找结果。

<

或寻找超集和最小子集对:

-