如何将嵌套列表与lis匹配

2024-06-17 18:37:44 发布

您现在位置:Python中文网/ 问答频道 /正文

问题是我试图比较嵌套列表和没有相同值或元素的列表?你知道吗

lst3 = [1, 6, 7, 10, 13, 28]
lst4 = [[13, 17, 18, 21, 32], [7, 11, 13, 14, 28], [1, 5, 6, 8, 15, 16]] 

lst5 = [list(filter(lambda x: x not in lst3, sublist)) for sublist in lst4]

返回:

[[17, 18, 21, 32], [11, 14], [5, 8, 15, 16]]

但我想从l3得到不匹配的号码。举个例子:

[[1,6,7,10,28],[1,6,10],[1,7,13,28]]

我希望结果是: [[1,6,7,10,28],[1,6,10],[1,7,13,28]]


Tags: lambdain元素列表fornotfilterlist
3条回答

与其使用filterlambda之类的工具,不如直接使用列表理解:

lst5 = [[x for x in lst3 if not x in sublist] for sublist in lst4]

哪个是

[[1, 6, 7, 10, 28], [1, 6, 10], [7, 10, 13, 28]]

这与您给出的预期输出略有不同,但我认为您在该预期输出的第三个子列表中犯了一个印刷错误。你知道吗

在您的示例中,您将每个sublist中的每个元素与lst3进行比较。你知道吗

lst5 = [list(filter(lambda x: x not in lst3, sublist)) for sublist in lst4]

问题是,您正在询问来自sublist的每个x是否不在lst3中,这将给出来自sublist的剩余结果。你可能想换个方式做。你知道吗

lst5 = [list(filter(lambda x: x not in sublist, lst3)) for sublist in lst4]

它不仅给了你想要的答案,而且我甚至注意到你在预期结果中犯了一个错误:

[[1, 6, 7, 10, 28], [1, 6, 10], [7, 10, 13, 28]]

与你的相比:

[[1, 6, 7, 10, 28], [1, 6, 10], [1, 7, 13, 28]]

(请参见最后一个嵌套数组)

在线示例: https://onlinegdb.com/Hy8K8GPSB

我会接受约翰·科尔曼的回答,但为了可读性,我会调整词序。你知道吗

lst5 = [[x for x in lst3 if x not in sublist] for sublist in lst4]

相关问题 更多 >