2 回答
TA贡献1874条经验 获得超12个赞
我不会称它们为“交集”和“并集”,因为这些操作在集合上具有明确定义的含义,而您要执行的操作两者都不是。
但是,做你想做的事:
l0 = [0, 4, 4, 4, 0, 0, 0, 8, 8, 0]
l1 = [0, 1, 1, 1, 0, 0, 0, 8, 8, 8]
values = [
(x
if x == y else 0,
0
if x == y == 0
else x if y == 0
else y if x == 0
else [x, y])
for x, y in zip(l0, l1)
]
result_a, result_b = map(list, zip(*values))
print(result_a)
print(result_b)
这对于数千甚至数百万个元素来说已经绰绰有余,因为操作是如此基础。当然,如果我们谈论的是数十亿,那么无论如何你可能都想看看 numpy。
TA贡献1798条经验 获得超3个赞
联合的半向量化解决方案和交集的完整解决方案:
import numpy as np
l0 = np.array(l0)
l1 = np.array(l1)
intersec = np.zeros(l0.shape[0])
intersec_idx = np.where(l0==l1)
intersec[intersec_idx] = l0[intersec_idx]
intersec = intersec.astype(int).tolist()
union = np.zeros(l0.shape[0])
union_idx = np.where(l0==l1)
union[union_idx] = l0[union_idx]
no_union_idx = np.where(l0!=l1)
union = union.astype(int).tolist()
for idx in no_union_idx[0]:
union[idx] = [l0[idx], l1[idx]]
和输出:
>>> intersection
[0, 0, 0, 0, 0, 0, 0, 8, 8, 0]
>>> union
[0, [4, 1], [4, 1], [4, 1], 0, 0, 0, 8, 8, [0, 8]]
注意:我认为您原来的联合解决方案是不正确的。查看最后的输出 8 vs [0,8]
添加回答
举报