Python 在列表上循环查找另一个列表的匹配项
假设有这样一个列表:Python 在列表上循环查找另一个列表的匹配项,python,loops,if-statement,select,iteration,Python,Loops,If Statement,Select,Iteration,假设有这样一个列表: [[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', 'Aufzeic
[[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_nennenen
列表也包含该列表)
我试图通过以下方式循环查看列表:
[[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
)
谢谢,但此解决方案返回
[]、[]、[]、[]、[]、['nannten']]
,因此:1。它返回所有列表(不符合条件的列表),但使其为空,并返回2。它将匹配条件的列表减少到单个字符串,这与期望的输出非常不同…@Gavrk I误解了您的原始代码;我认为您确实需要将if
子句保留在原来的位置,然后将其重写为使用任意值。请参阅我的编辑。
[t for t in tt if any([vds in t for vds in vds_nennen])]