Bin*_*nie 8 python intersection list nested-lists
我想在维护顺序的同时找到嵌套列表之间的交集.
taxa = [['E_pyrifoliae_Ep1_96', 'Bacteria', 'Proteobacteria', 'Gammaproteobacteria', 'Enterobacteriales', 'Enterobacteriaceae', 'Erwinia'],
['E_amylovora_CFBP1430', 'Bacteria', 'Proteobacteria', 'Gammaproteobacteria', 'Enterobacteriales', 'Enterobacteriaceae', 'Erwinia'],
['E_amylovora_ATCC49946', 'Bacteria', 'Proteobacteria', 'Gammaproteobacteria', 'Enterobacteriales', 'Enterobacteriaceae', 'Erwinia']]
Run Code Online (Sandbox Code Playgroud)
找到我的交集点:
set.intersection(*map(set, taxa))
Run Code Online (Sandbox Code Playgroud)
要么
set(taxa[0]).intersection(*taxa)
Run Code Online (Sandbox Code Playgroud)
但原始订单没有保留.
set(['Erwinia', 'Gammaproteobacteria', 'Enterobacteriaceae', 'Enterobacteriales', 'Proteobacteria', 'Bacteria'])
Run Code Online (Sandbox Code Playgroud)
基本上,我需要做的是找到嵌套列表之间的最后一个共同元素(它们是分类学分类).因此,当我可以调用最后一个条目时,我不需要找到所有交叉点,只需要找到最后一个或所有交叉点.
intersection_lst[-1]
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我希望输出为'Erwinia'.
谢谢你的帮助.
找到交叉点,然后重新获得订单.
intersection_set = set.intersection(*map(set, taxa))
intersection_lst = [t for t in taxa[0] if t in intersection_set]
Run Code Online (Sandbox Code Playgroud)
或者,如果你非常喜欢单行:
sorted(set.intersection(*map(set, taxa)), key=lambda x: taxa[0].index(x))
Run Code Online (Sandbox Code Playgroud)