如何匹配两个二维列表

问题描述 投票:0回答:1

我无法在 df1 中的任何列中找到与 df2 中的任何列匹配的匹配项并返回匹配值和值。例如,

df1 = [[2,4,6,8,9,10],[10,13,15,17,26,44],[27,28,34,37,40]]

df2 = [[1,2,4,5,6,8],[5,6,20,22,23,34],[8,12,13,34,45,46],[9,10,14,29,32,33],[1,22,13,23,33,35],[1,6,7,8,9,10],[0,2,3,5,6,8]] 

我希望我的结果如下所示

 result = [[1,2,2,4,5,6,6,8,8,9,10],
[2,4,5,6,6,8,9,10,20,22,23,34],
[2,4,6,8,8,9,10,12,13,34,45,46]
[2,4,6,8,9,9,10,10,14,29,32,33]
[1,2,4,6,6,7,8,8,9.10,10]
[0,2,2,3,4,5,6,6,8,8,9,10]],

[[8,10,12,13,13,15,17,26,34,44,45,46],
[9,10,10,13,14,15,17,26,29,32,33,44],
[1,6,7,8,9,10,10,13,15,17,26,44]],

[[5,6,20,22,23,,27,28,34,34,37,40]
[8,12,13,27,28,34,37,40,45,46]]
python list multidimensional-array jupyter-notebook pycharm
1个回答
0
投票

您可以使用集合来建立基本匹配并将匹配值添加到输出列表。

我无法准确得到您预期的结果,但很接近(您的示例中可能缺少第二组的

[9, 10, 10, 14, 29, 32, 33]
):

result = [ [sorted([*c2,*set(c1)&set(c2)]) for c2 in df2 if set(c1)&set(c2)] 
           for c1 in df1 ]

print(*result,sep="\n")

[[1, 2, 2, 4, 4, 5, 6, 6, 8, 8], [5, 6, 6, 20, 22, 23, 34], 
 [8, 8, 12, 13, 34, 45, 46], [9, 9, 10, 10, 14, 29, 32, 33], 
 [1, 6, 6, 7, 8, 8, 9, 9, 10, 10], [0, 2, 2, 3, 5, 6, 6, 8, 8]]
[[8, 12, 13, 13, 34, 45, 46], [9, 10, 10, 14, 29, 32, 33], 
 [1, 13, 13, 22, 23, 33, 35], [1, 6, 7, 8, 9, 10, 10]]
[[5, 6, 20, 22, 23, 34, 34], [8, 12, 13, 34, 34, 45, 46]]

请注意,使用集合假定您在子列表中没有重复值。如果你这样做,那么你需要使用集合中的

Counter
类而不是
set
.

© www.soinside.com 2019 - 2024. All rights reserved.