python - 循环遍历列表以查找另一个列表的匹配项
问题描述
假设有一个这样的列表:
[[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]
但一无所获:
[]
提前抱歉我对循环的无知......任何建议将不胜感激。
解决方案
您需要编写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])]