Python 如何获取导致any()返回True的值?
调用Python 如何获取导致any()返回True的值?,python,python-3.x,list,any,Python,Python 3.x,List,Any,调用any()函数时,它只返回True或False。如果它返回True,如何获取导致它返回True的元素 all=['azeri','english','japan','india','indonesia'] lg=‘来自日本’ lgn=lg.split() 如果有(lgn中的单词表示所有单词): 打印(word) 在这种情况下,我想获得单词japan。正如所写的,此代码只返回name错误:名称“word”未定义。您的假设是正确的,any返回True或False,这是基于条件匹配iterabl
any()
函数时,它只返回True
或False
。如果它返回True
,如何获取导致它返回True
的元素
all=['azeri','english','japan','india','indonesia']
lg=‘来自日本’
lgn=lg.split()
如果有(lgn中的单词表示所有单词):
打印(word)
在这种情况下,我想获得单词
japan
。正如所写的,此代码只返回name错误:名称“word”未定义。
您的假设是正确的,any
返回True
或False
,这是基于条件匹配iterable中的任何元素这一事实。但这不是提取满足条件的元素的方式
从文档中:
任意(可编辑)如果iterable的任何元素为True,则返回True。如果iterable为空,则返回False 在您的情况下,由于满足条件,print语句将按如下方式执行。但是由于
word
仅在any
中的生成器范围内,因此您会得到错误NameError:name'word'未定义。
此外,您不应该将变量命名为
all
,因为它将隐藏内置项
如果你想找到满足条件的单词列表,你应该在列表理解中使用for循环
all_words = ['azeri', 'english', 'japan', 'india', 'indonesia']
lg = 'from japan'
lgn = lg.split()
#Find words which are present in lgn
res = [word for word in all_words if word in lgn]
print(res)
输出将是
['japan']
根据您的要求,我认为您应该只使用过滤器,而不是任何过滤器。下面的代码应该可以工作
all = ['azeri', 'english', 'japan', 'india', 'indonesia']
lg = 'from japan'
lgn = lg.split()
print(list(filter(lambda word: word in lgn, all)))
注意:使用all
命名变量会隐藏一个内置函数。为什么不直接使用:用于lgn中的word:print(word)如果word在其他所有函数中都没有
?在您的示例中,word
仅在any
调用中定义,因此您无法访问它。这是一个很好的解决方案,但我希望输出一个string
。所以我会为lgn中的单词编写一个代码,:if-word-in-all_-words:print(word)else:None
就像@0x2bad saidOkay所说的,你可以在for循环@ArmandDwi中打印res
的元素
all = ['azeri', 'english', 'japan', 'india', 'indonesia']
lg = 'from japan'
lgn = lg.split()
print(list(filter(lambda word: word in lgn, all)))