为什么这个Python“any”函数不返回True?

2024-04-19 16:27:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我不明白为什么any()没有按我期望的方式工作。下面,我想说,如果城市列表中的任何一个城市在短语.拆分(),返回True。但为什么当短语.拆分()是['replacement', 'windows', 'in', 'seattle', 'wa'],而“西雅图”显然是在短语.拆分()列表?在

>>> cities = ['seattle', 'san antonio', 'denver']
>>> phrase = 'replacement windows in seattle wa'
>>> any(cities) in phrase.split()
False
>>> 'seattle' in phrase.split()
True

Tags: intrue列表windows方式anysplitsan
3条回答

因为in any(cities)将为非空列表返回True,或者为空列表返回{},因此成员资格测试中从不包含该值。还要注意,按空间拆分将把san antonio分成两个单词,因此使用这种方法将无法匹配它。另一种方法是使用正则表达式:

import re

cities = ['seattle', 'san antonio', 'denver']
phrase = 'replacement windows in seattle wa'

has_city = re.compile('|'.join(sorted(cities, key=len, reverse=True))).search
if has_city(phrase):
    # do whatever

这与if any(city in phrase for city in cities)(它将找到sanantonio)非常相似,但是需要对phrase进行多次解析,而不是regex只执行一次。在

您可能还希望考虑re.escaping字符串并根据匹配的确切条件应用单词边界。在

试试这句话

any(word in phrase.split() for word in cities)

你最初的陈述并不是在考验“城市”里的每一个词短语.拆分()。”

因为any(cities)返回True,而True不在列表中:

>>> cities = ['seattle', 'san antonio', 'denver']
>>> phrase = 'replacement windows in seattle wa'
>>> any(cities)
True
>>> True in phrase.split()
False
>>> any(cities) in phrase.split()
False

您可以使用此方法查看列表中是否有城市:

^{pr2}$

相关问题 更多 >