提问人:cyber_working 提问时间:10/21/2022 最后编辑:cyber_working 更新时间:10/21/2022 访问量:101
比较嵌套列表中包含的所有列表,以仅获取匹配的字符串
Compare all the lists contained in a nested list to get only the strings that match
问:
我想比较嵌套列表中包含的所有列表,以便在末尾有对应的对词。
我使用 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 个列表的代码并不完美,因为我得到了重复项。
答:
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 声望”才能投票
评论