Skip to main content
 首页 » 编程设计

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

2025年05月04日21lyhabc

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

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

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 列表 如下所示:

['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 和python 在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)