【发布时间】:2013-01-07 13:02:07
【问题描述】:
我想从两个给定的嵌套列表中创建一个新的嵌套列表(每个列表中都有唯一的项目),以便新的嵌套列表是两个列表的最大公共交集。
一个例子希望能帮助我弄清楚我的问题:
old1 = [[1,2],[3,4,5],[6,7,8],[9]]
old2 = [[1,2,3],[4,5,7],[6,8,10]]]
new = [[1,2],[3],[4,5],[6,8],[7],[9],[10]]
顺序并不重要,因此使用集合可能很有用。
有人有想法吗?任何帮助将不胜感激!
__
好吧,很明显,最容易得到最大公共交点的是
new1 = filter(None,[list(set(o1) & set(o2)) for o1 in old1 for o2 in old2])
print new1
[[1, 2], [3], [4, 5], [7], [8, 6]]
如果您想包含仅出现在旧列表之一中的整数,您可以在之后添加它们:
a,b = set(sum(old1, [])), set(sum(old2, []))
c = (a | b) - (a & b)
for d in c:
new1.append([d])
感谢大家的帮助!
【问题讨论】:
-
您能解释一下如何获得两个列表的“最大公共交集”吗?
-
试试这个:
[list(set(o1) & set(o2)) for o1 in old1 for o2 in old2 ] -
可能只是我,但我看不出新列表是如何从以前的列表中来的?你能解释一下它背后的一些逻辑吗?
-
@JonClements -- 不只是你...
-
@mgilson 谢天谢地 - 我知道我正在度过一个“金发碧眼的日子”,(为了推出一个新系统需要每天 18 小时),所以现在靠咖啡过活 - 但是 呼 :)
标签: python list nested intersection