在 Python 中过滤掉结构怪异的列表中的元素

Posted

技术标签:

【中文标题】在 Python 中过滤掉结构怪异的列表中的元素【英文标题】:Filtering out elements in a weirdly structured list in Python 【发布时间】:2022-01-20 00:21:17 【问题描述】:

我有一个奇怪的格式结构列表

mylist =[(['softwar', '3', 'instal', 'instruct'], 'read'), (['3', 'read', 'instruct', 'nis'], 'instal'), (['read', 'instal', 'nis', '2004'], 'instruct'), (['instal', 'instruct', '2004', 'nav'], 'nis'), (['instruct', 'nis', 'nav', '2004'], '2004'), (['nis', '2004', '2004', 'prior'], 'nav'), (['2004', 'nav', 'prior', 'latsni'], '2004'), (['nav', '2004', 'latsni', 'still'], 'prior'), (['2004', 'prior', 'still', 'end'], 'latsni'),........]

我想从 mylist 中过滤掉相关词(在相关词列表中):

e.g 
relevant_words =['read','instal']
#I would want to just return:
[(['softwar', '3', 'instal', 'instruct'], 'read'),(['3', 'read', 'instruct', 'nis'], 'instal')] 

谁能指出我正确的方向如何做到这一点?

【问题讨论】:

我在想 mylist[x][1] 之类的东西在相关词中 为什么你的数据结构如此奇怪 @jasonm 它来自我正在使用的关于文档中术语上下文的库中的方法 【参考方案1】:

您可以使用列表推导:

[x for x, y in mylist if y in relevant_words]

输出

[['softwar', '3', 'instal', 'instruct'], ['3', 'read', 'instruct', 'nis']]

如果你想包含相关的词:

[(x,y) for x, y in mylist if y in relevant_words]

[x for x in mylist if x[1] in relevant_words]

输出

[(['softwar', '3', 'instal', 'instruct'], 'read'), (['3', 'read', 'instruct', 'nis'], 'instal')]

【讨论】:

我怎么能在最后包含与之关联的相关单词,例如 [(['softwar', '3', 'instal', 'instruct'], 'read') ,(['3', 'read', 'instruct', 'nis'],'instal')] (我现在将编辑问题) @Chris 我知道,我现在改变了问题,我道歉

以上是关于在 Python 中过滤掉结构怪异的列表中的元素的主要内容,如果未能解决你的问题,请参考以下文章

python中内置的序列操作函数

python判断列表中是不是有重复元素

从列表中删除 NoneType 元素的本机 Python 函数?

python3中的filter()函数

python三大类型数据筛选

python之函数filterreduce