我有两个二维列表,其中有大量行,并且两个列表的大小长度不同。我在 df1 和 df2 的每个子列表中查找匹配时遇到问题。假设我想在 df2 中找到 df1 的匹配项,我想返回匹配值和不匹配值。它可能会转换为 3d 列表,然后我想删除括号并将其转换回 2d 列表。如果有一种方法可以转换为 2d 列表而不先转换为 3d 列表,那将对我有很大帮助。
这是一个简短的例子(我的二维列表)
df1 = [[1, 7, 3, 5], [2, 5, 14, 10]]
df2 = [[1, 17, 3, 5], [34, 14, 74], [34, 3, 87], [25, 14, 10]]
转换为 3d 列表。
match = [[[1,3,5], [],[3], []], [[5],[14], [], [10,14]]]
no_match = [[[17], [], [34,87], []], [[1,3,17], [34,74], [], [25]]]
期望结果(删除括号并转换回二维列表)。
match = [[1,3,5], [3], [5], [14], [14,10]]
no_match = [[17], [34,87], [1,3,17], [34,74], [25]]
您也许可以使用嵌套循环在字典中进行迭代:
matches = []
no_matches = []
for sublist1 in df1:
for sublist2 in df2:
match = [val for val in sublist1 if val in sublist2]
no_match = [val for val in sublist2 if val not in sublist1]
if match: matches.append(match)
if no_match: no_matches.append(no_match)
print("matches:", matches)
print("no matches:", no_matches)