我有一个清单
l1 = [('is', 'VBZ'), ('plant', 'NN')]
我要检查列表中是否存在VB
我使用了以下代码,但没有得到结果。
match = [x for x in l1 if 'VB' in x]
答案 0 :(得分:0)
我认为您需要:
l1 = [('is', 'VBZ'), ('plant', 'NN')]
print([x for x in l1 if 'VB' in x[1]])
输出
[('is', 'VBZ')]
为什么您的代码不起作用
您正在检查VB
是否在('is', 'VBZ')
中。据我了解,它们是POS tags
,并且将始终位于第一索引。您需要检查列表中每个元组的索引1是否存在VB
答案 1 :(得分:0)
如果您没有在第一个索引上始终出现“ VB”,
match = [y for y in l1 if any(['VB' in x for x in y])]
第1步:逐一访问元组。
第2步:检查字符串“ VB”是否在所访问的元组的任何字符串项中存在。
答案 2 :(得分:0)
在您的解决方案中,您要检查子字符串,为此,您需要搜索元组中的元素。
如果您要搜索确切的字符串,那么您的解决方案是正确的
'VBZ' in ('is', 'VBZ')
==> True
'VB' in ('is', 'VBZ')
==> False
如果您知道2个要素 将在元组中
[tu for tu in l1 if 'VB' in (tu[1] or tu[0])]
==> [('is', 'VBZ')]
如果不确定元组中的元素
[tu for tu in l1 if any(['VB' in elem for elem in tu])]
==> [('is', 'VBZ')]