如果元组包含子字符串,请在元组列表中标识该元组

时间:2019-04-05 10:18:06

标签: python python-3.x

我有一个清单

l1 = [('is', 'VBZ'), ('plant', 'NN')]

我要检查列表中是否存在VB

我使用了以下代码,但没有得到结果。

match = [x for x in l1 if 'VB' in x]

3 个答案:

答案 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')]