当我调用any()
函数时,它仅返回True
或False
。如果返回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.
答案 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
返回any
或True
是基于条件与可迭代元素中的任何元素都匹配的事实。但这不是提取满足条件的元素的方式
从文档中: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)))