如何获取导致any()返回True的值?

时间:2019-05-18 04:23:36

标签: python python-3.x list any

当我调用any()函数时,它仅返回TrueFalse。如果返回True,如何获取导致其返回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。如所写,此代码仅返回NameError: name 'word' is not defined.

2 个答案:

答案 0 :(得分:4)

您的假设是正确的,即Part: wav3_pkg_battery_latch-> body density: 7830.64 kg/m3 Part: wav3_pkg_battery_latch_spring-> body density: 7830.64 kg/m3返回anyTrue是基于条件与可迭代元素中的任何元素都匹配的事实。但这不是提取满足条件的元素的方式

从文档中:https://docs.python.org/3/library/functions.html#any

  

任何(可迭代)
  如果iterable的任何元素为true,则返回True。如果iterable为空,则返回False。

在您的情况下,由于满足条件,因此将按以下方式执行打印语句。但是由于False仅在word内部的生成器范围内,因此会出现错误any
另外,您不应该命名变量NameError: name 'word' is not defined.,因为它会遮盖内置变量 all

all

如果要查找满足条件的单词列表,则应在列表理解中使用for循环

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

输出将为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)

答案 1 :(得分:2)

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

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

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