比较嵌套列表中包含的所有列表,以仅获取匹配的字符串

Compare all the lists contained in a nested list to get only the strings that match

提问人:cyber_working 提问时间:10/21/2022 最后编辑:cyber_working 更新时间:10/21/2022 访问量:101

问:

我想比较嵌套列表中包含的所有列表,以便在末尾有对应的对词。

我使用 2 个不同的列表来管理它,以获取每个列表中匹配的字符串。

这样:

listA = [['Test1','Test2','Test3'], ['Test1','Test4','Test2']]
listB = [['Test1','Test2','Test5'], ['Test10','Test4','Test2']]

我得到的结果:

['Test1', 'Test2'] # Matched at [('Test1,'Test2'),'Test3'] -> [('Test1','Test2'),'Test5']

['Test2'] # Matched at ['Test1','Test4',('Test2')] -> ['Test1',('Test2'),'Test5']

['Test4', 'Test2'] # Matched at ['Test1',('Test4','Test2)] -> ['Test10',('Test4','Test2')]

在此示例中,我们注意到“Test3、Test5 和 Test10”不在结果中,因为没有一个与其他列表匹配。

我想用一个嵌套列表来做到这一点。

list = [['Test1','Test2','Test3'], ['Test1','Test4','Test2'], ['Test1','Test2','Test5'], ['Test5','Test4','Test2']]

这里我使用的代码有两个列表:

from collections import Counter
from itertools import takewhile, dropwhile
    
for x in listB:
    for y in listA:

        counterA = Counter(x)
        counterB = Counter(y)
        
        count = counterA + counterB

        count = dict(count)

        prompt_match = [k for k in count if count[k] == 2]

        print(prompt_match)

2 个列表的代码并不完美,因为我得到了重复项。

Python 排序比较 嵌套列表 匹配

评论


答:

0赞 Deepak Tripathi 10/21/2022 #1

您可以尝试在列表推导中进行交集set

from itertools import product
listA = [['Test1','Test2','Test3'], ['Test1','Test4','Test2']]
listB = [['Test1','Test2','Test5'], ['Test10','Test4','Test2']]
set(tuple(set(x)&set(y)) for x,y  in product(listA, listB))

# output
{('Test1', 'Test2'), ('Test2',), ('Test4', 'Test2')}

For nested list use below approach
from itertools import combinations
listA = [['Test1','Test2','Test3'], ['Test1','Test4','Test2'], ['Test1','Test2','Test5'], ['Test10','Test4','Test2']]
set(tuple(set(x)&set(y)) for x,y  in combinations(listA, 2))
# output
{('Test1', 'Test2'), ('Test2',), ('Test4', 'Test2')}

评论

0赞 cyber_working 10/21/2022
谢谢你的回答!我想用 wingle 嵌套列表来做,我在我的主题中指定了它。当它适用于 2 个不同的列表时,我发现您的答案是完美的!
0赞 Deepak Tripathi 10/21/2022
这几乎是一回事,您在问题中显示的列表也是不正确的。请检查 [[],[]] [[],[]] ->这是整体元组。
0赞 cyber_working 10/21/2022
确实这是一个错误,我纠正了它。我想使用嵌套列表来执行此操作,如下所示:[[],[],[],[]]
0赞 Deepak Tripathi 10/21/2022
@cyber_working完成更改,现在请看
1赞 cyber_working 10/21/2022
我需要“15 声望”才能投票