如何获取导致 any() 变为 return True 的值?

How do I obtain the value that caused any() to return True?

当我调用 any() 函数时,它 return 只有 TrueFalse。如果它returns True,我如何获得导致它return True的元素?

all = ['azeri', 'english', 'japan', 'india', 'indonesia']
lg = 'from japan'
lgn = lg.split()
if any(word in lgn for word in all):
      print(word)

在这种情况下,我想获取单词japan。这段代码,如所写,只是 returns NameError: name 'word' is not defined.

你的假设是正确的 any returns TrueFalse 基于条件匹配可迭代中的任何元素这一事实。但这不是您提取满足条件的元素的方式

来自文档:https://docs.python.org/3/library/functions.html#any

any(iterable)
Return True if any element of the iterable is true. If the iterable is empty, return False.

在你的例子中,由于满足条件,打印语句将执行如下。但是由于 word 只在 any 内部的生成器范围内,你得到错误 NameError: name 'word' is not defined.
另外你不应该命名你的变量 all 因为它会影响内置 all

In [15]: all = ['azeri', 'english', 'japan', 'india', 'indonesia'] 
    ...: lg = 'from japan' 
    ...: lgn = lg.split() 
    ...: if any(word in lgn for word in all): 
    ...:     print('condition met') 
    ...:                                                                                                                                                                                                                     
condition met

如果你想找到满足条件的单词列表,你应该使用a for-loop in say a list-comprehension

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']

我认为根据您的要求,您应该只使用 filter 而不是任何一个。下面的代码应该可以工作。

all = ['azeri', 'english', 'japan', 'india', 'indonesia']
lg = 'from japan'
lgn = lg.split()

print(list(filter(lambda word: word in lgn, all)))