首页 > 解决方案 > 循环遍历列表以查找另一个列表的匹配项

问题描述

假设有一个这样的列表:

[[t[0] for t in tagger.tag(s)] for s in corpus.sents()[:5]]

看起来像这样:

[['1'], ['Hermann', 'Hesse', 'Der', 'Steppenwolf'], ['Erzählung'], ['Vorwort', 'des', 'Herausgebers'],
['Dieses', 'Buch', 'enthält', 'die', 'uns', 'geblichenen', 'Aufzeichnungen', 'jenes', 'Mannes', ',',
'welchen', 'wir', 'mit', 'einem', 'Ausdruck', ',', 'den', 'er', 'selbst', 'mehrmals', 'gebrauchte', ',',
'den', '«', 'Steppenwolf', '»', 'nannten', '.']]

现在,我需要选择列表列表中包含此处列出的任何字符串的所有列表:

vds_nennen = ['nennen', 'nenne', 'nennst', 'nennt', 'nenne', 'nennest', 'nannte', 
'nanntest', 'nannten', 'nanntet', 'nennte', 'nenntest', 'nennten', 'nenntet', 'genannt'] 

所以想要的输出是:

[['Dieses', 'Buch', 'enthält', 'die', 'uns', 'geblichenen', 'Aufzeichnungen', 
'jenes', 'Mannes', ',', 'welchen', 'wir', 'mit', 'einem', 'Ausdruck', ',', 'den',
'er', 'selbst', 'mehrmals', 'gebrauchte', ',', 'den', '«', 'Steppenwolf', '»', 
'nannten', '.']]

(因为列表列表中的最后一个列表包含'nannten'vds_nennen列表也有)

我试图以vds_nennen这种方式循环列表:

[[t[0] for t in tagger.tag(s)] for s in corpus.sents()[:5] if [vds for vds in vds_nennen] in s]

但一无所获:

[]

提前抱歉我对循环的无知......任何建议将不胜感激。

标签: pythonloopsif-statementselectiteration

解决方案


您需要编写if要使用的表达式any

[[t[0] for t in tagger.tag(s)] for s in corpus.sents()[:5] if any([vds in s for vds in vds_nennen])]

您还可以对原始列表进行后处理(调用它tt),例如

[t for t in tt if any([vds in t for vds in vds_nennen])]

推荐阅读