例如,如果我们有
ListofLists1 = [[0], [0], [1, 3], [1, 4], []]
和
ListofLists2 = [[0, 2], [0, 1, 2, 3], [1, 3, 4], [1, 3, 4], [0, 1, 3]]
我们定义
Diff = ListofLists2 - ListofLists1
我希望以下列形式输出
Diff = [[2], [1,2,3], [4], [3], [0,1,3]]
对于我正在进行的特定类型的工作,我总是希望在ListofLists1中的相应(相同索引)列表中包含ListofLists1内的任何列表中找到所有元素。但是,ListofLists2中的列表可能包含ListofLists1中相应列表中不存在的元素。
答案 0 :(得分:3)
将两个列表拼接在一起,作为列表推导的一部分迭代它们,并在每种情况下找到设置的对称差异,将每个结果集设置为列表类型:
ListofLists1 = [[0], [0], [1, 3], [1, 4], []]
ListofLists2 = [[0, 2], [0, 1, 2, 3], [1, 3, 4], [1, 3, 4], [0, 1, 3]]
[list(set(l1).symmetric_difference(l2)) for l1,l2 in zip(ListofLists1,ListofLists2)]
给出:
[[2], [1, 2, 3], [4], [3], [0, 1, 3]]
答案 1 :(得分:0)
另一种解决方案刚刚袭击了我的大脑。
怎么样?Diff = map( lambda x,y: list(set(x) - set(y)), ListofLists2, ListofLists1 )
这也会返回
Diff = [[2], [1,2,3], [4], [3], [0,1,3]]
的
ListofLists1 = [[0], [0], [1, 3], [1, 4], []]
ListofLists2 = [[0, 2], [0, 1, 2, 3], [1, 3, 4], [1, 3, 4], [0, 1, 3]]
有关此方法与psychemedia答案的比较的任何想法(就长度通常为数百万的列表的实施速度而言)?