Pythonic查找两个数组列表之间所有不同交叉点和差异的方法

Pythonic查找两个数组列表之间所有不同交叉点和差异的方法,python,numpy,set,intersection,difference,Python,Numpy,Set,Intersection,Difference,这是我的一篇文章的概括。我需要找到两个不同数组列表之间的所有交点和差异。任何列表的数组内都没有交集,只有不同列表中的数组之间才有交集 下一个示例的预期结果 x = [np.array([0, 6, 7, 10]), np.array([1, 2, 5, 9])] y = [np.array([ 7, 10]), np.array([8]), np.array([0, 3, 4, 5])] 应该是 [[0], [6], [7, 10], [1, 2, 9], [5], [8], [3, 4]]

这是我的一篇文章的概括。我需要找到两个不同数组列表之间的所有交点和差异。任何列表的数组内都没有交集,只有不同列表中的数组之间才有交集

下一个示例的预期结果

x = [np.array([0, 6, 7, 10]), np.array([1, 2, 5, 9])]
y = [np.array([ 7, 10]), np.array([8]), np.array([0, 3, 4, 5])]
应该是

[[0], [6], [7, 10], [1, 2, 9], [5], [8], [3, 4]]

有什么建议吗?提前谢谢

分离参数没有意义,结果将与联合
x
y
时相同。所以你有一套集合,试着找到不同的片段。要找到它们,您可以遍历所有元素,并记住在哪个集合遇到此值。然后,如果两个元素具有完全相同的集合集(假设它们在第二和第四集合处相遇),我们将这些元素作为联合组返回

from collections import defaultdict


def pythonic(s):
    """
    >>> pythonic([[0, 6, 7, 10], [1, 2, 5, 9], [7, 10], [0, 3, 4, 5]])
    [[0], [6], [7, 10], [1, 2, 9], [5], [3, 4]]
    >>> pythonic([[7, 10], [8], [0, 3, 4, 5], [0, 6, 7, 10], [1, 2, 5, 9]])
    [[7, 10], [8], [0], [3, 4], [5], [6], [1, 2, 9]]
    >>> pythonic([[0, 1, 4, 5], [1, 2, 3, 4], [3, 4, 5, 6]])
    [[0], [1], [4], [5], [2], [3], [6]]
    """
    all_elements = defaultdict(list)
    for i, ss in enumerate(s):
        for elem in ss:
            all_elements[elem].append(i)
    reversed = defaultdict(list)
    for k, v in all_elements.items():
        reversed[frozenset(v)].append(k) # or tuple can be used but "frozenset" feels "safer"
    return list(reversed.values())

(0,6,7,10)和(7,10)之间的分解应该是什么?它不应该是(0,6)(7,10)和()吗?第三个集合应该是空的或者没有,因为在(7,10)中没有不可理解的部分。在(0,6,7,10)和(7,10)之间,函数应该返回(0,6)和(7,10),但是在这个特殊情况下,(0,6)被进一步分解为(0)和(6),因为(0,3,4,5)中存在0,但那里不存在6。我明白了。所以分解应该一直进行到没有交集为止?是的,这就是想法。如果在u和v中没有交集,但是在u中存在交集呢?比如u=[(1,10),(2,10)]和v=[(3,4),(5,6)]。从u到v的任何一对数组之间都没有交集。那么答案应该是(1,10),(2,10)(3,4)(5,6)吗?还是应该是(1)、(10)、(2)、(3,4)、(5,6)?非常感谢!我对它进行了测试,它似乎工作得很好。昨天我想用defaultdict解决一些类似的问题,我想我还有很多东西要学。很难表达我对你的帮助的感激之情。