为了账号安全,请及时绑定邮箱和手机立即绑定

如果元组包含子字符串,则识别元组列表中的元组

如果元组包含子字符串,则识别元组列表中的元组

UYOU 2021-12-29 20:31:40
我有一个清单l1 = [('is', 'VBZ'), ('plant', 'NN')]我想检查VB列表中是否存在我使用了以下代码,但它没有给我结果。match = [x for x in l1 if 'VB' in x]
查看完整描述

3 回答

?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

我认为你需要:


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


print([x for x in l1 if 'VB' in x[1]])

输出


[('is', 'VBZ')]

为什么您的代码不起作用


你正在检查是否VB在里面('is', 'VBZ'),它不在。据我了解,这些是POS tags并且将始终处于第一索引。您需要检查VB列表中每个元组的索引 1 是否存在


查看完整回答
反对 回复 2021-12-29
?
德玛西亚99

TA贡献1770条经验 获得超3个赞

在您的解决方案中,您要检查子字符串,为此您需要搜索Tuple 中的元素。


如果您想搜索确切的字符串,那么您的解决方案是正确的


'VBZ' in ('is', 'VBZ')

==> True


'VB' in ('is', 'VBZ')

==> False


如果你知道exatly 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')]


查看完整回答
反对 回复 2021-12-29
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

如果您没有始终在第一个索引上出现“VB”,

match = [y for y in l1 if any(['VB' in x for x in y])]

第 1 步:逐个访问元组。

第 2 步:检查被访问元组的任何字符串项中是否存在字符串 'VB'。


查看完整回答
反对 回复 2021-12-29
  • 3 回答
  • 0 关注
  • 144 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信