在列表中搜索项目时如何使用 any 和 not (python)

How to use any and not when searching for items in a list (python)

所以我正在编写一个程序来搜索职位发布的关键字。我已经有了将整个职位描述变成单个单词列表、删除空格、特殊字符、将所有内容设为小写等的代码。

我想做一些事情,比如“如果这个列表包含 python 就打印一些东西,但如果它有 pythonVBA. 就不要打印这就是我的意思有:

def query_job_posting(url, query_list_include, query_list_exclude): 

    soup = create_soup(url)

    ...list formatting functions...

    for i in job_description_list:
        if any(word in i for word in query_list_include) and not any(exclude in i for exclude in query_list_exclude):
            print(url)

job_description list 看起来像这样:

['this',
 'is',
  'a',
  'vba',
  'job',
  'python']

但它似乎不起作用。

如果 query_list_include=['python']query_list_exclude=[] 则打印 url。

如果 query_list_exclude=['vba']query_list_include=[] 则 url 不会打印。

但是如果我将 python 保留为包含而将 vba 保留为排除,那么 url 仍然会打印,即使我手动验证了 vba 和 [=13] =] 在 job_descripton_list

我哪里错了?

问题:

您实际上是在列表的每个元素中查找每个单词:

for e in list:
    if any(w in e for w in include) and not any(w in e for w in exclude):
        print(url)

执行以下操作:

'this'    # do nothing
'is'      # do nothing
'a'       # do nothing
'job'     # do nothing
'python'  # print url

您可以通过以下方式验证:

for e in list:
    if any(w in e for w in include) and not any(w in e for w in exclude):
        print(e, url)

应该打印 python <url>。 在这种情况下,列表中有 'VBA' 不会有任何改变


解决方案:

根据你的解释你想做的事情:

url = ...

list = ['this', 'is', 'a', 'job', 'python']
include = ['python']
exclude = ['VBA']

if any(w in list for w in include) and not any(w in list for w in exclude):
    print(url)

Out[]: <url>

它从 if 语句评估条件:

'python' in list  --> True
'VBA' not in list --> True

然后执行print(url)