我知道如何获得两个平面列表的交集:
b1 = [1,2,3,4,5,9,11,15]
b2 = [4,5,6,7,8]
b3 = [val for val in b1 if val in b2]
Run Code Online (Sandbox Code Playgroud)
要么
def intersect(a, b):
return list(set(a) & set(b))
print intersect(b1, b2)
Run Code Online (Sandbox Code Playgroud)
但是当我必须找到嵌套列表的交集时,我的问题就开始了:
c1 = [1, 6, 7, 10, 13, 28, 32, 41, 58, 63]
c2 = [[13, 17, 18, 21, 32], [7, 11, 13, 14, 28], [1, 5, 6, 8, 15, 16]]
Run Code Online (Sandbox Code Playgroud)
最后我想收到:
c3 = [[13,32],[7,13,28],[1,6]]
Run Code Online (Sandbox Code Playgroud)
你能帮我个忙吗?
考虑有一些整数列表:
#--------------------------------------
0 [0,1,3]
1 [1,0,3,4,5,10,...]
2 [2,8]
3 [3,1,0,...]
...
n []
#--------------------------------------
Run Code Online (Sandbox Code Playgroud)
问题是合并具有至少一个共同元素的列表.因此,仅给定部分的结果如下:
#--------------------------------------
0 [0,1,3,4,5,10,...]
2 [2,8]
#--------------------------------------
Run Code Online (Sandbox Code Playgroud)
在大数据上执行此操作的最有效方法是什么(元素只是数字)?
是tree结构一些思考?我现在通过将列表转换为sets迭代并迭代交叉来完成工作,但它很慢!而且我有一种如此初级的感觉!此外,实现缺少一些东西(未知),因为有些列表有时会保持未合并!话虽如此,如果你提出自我实现,请慷慨并提供一个简单的示例代码[显然Python是我的偏爱:)]或pesudo代码.
更新1:
这是我使用的代码:
#--------------------------------------
lsts = [[0,1,3],
[1,0,3,4,5,10,11],
[2,8],
[3,1,0,16]];
#--------------------------------------
Run Code Online (Sandbox Code Playgroud)
功能是(越野车!!):
#--------------------------------------
def merge(lsts):
sts = [set(l) for l in lsts]
i = 0
while i < len(sts):
j = i+1
while j < len(sts):
if len(sts[i].intersection(sts[j])) > 0:
sts[i] = sts[i].union(sts[j])
sts.pop(j)
else: j += 1 #---corrected
i …Run Code Online (Sandbox Code Playgroud) [[1, '34', '44'], [1, '40', '30', '41'], [1, '41', '40', '42'], [1, '42', '41', '43'], [1, '43', '42', '44'], [1, '44', '34', '43']]
Run Code Online (Sandbox Code Playgroud)
我有一份清单清单.我的目的是检查是否有任何一个子列表与其他子列表有任何共同点(不包括要比较的第一个索引对象).如果它有任何共同点,那么统一这些子列表.
例如,对于这个例子,我的最终答案应该是这样的:
[[1, '34, '44', '40' '30', '41', '42', '43']]
Run Code Online (Sandbox Code Playgroud)
我可以理解我应该将子列表转换为集合,然后使用union()和intersection()操作.但我坚持的是如何比较每个集/子列表.我不能在列表上运行循环并逐个比较每个子列表,因为列表的内容将被修改,这将导致错误.
我想知道的是有没有有效的方法来比较所有子列表(转换为集合)并获得它们的并集?