Как получить значение, которое заставило any () вернуть True?

Когда я вызываю функцию 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.

Всего 2 ответа


Вы правы в своем предположении, что any возвращает True или False на основании того факта, что условие соответствует для любого элемента в итерируемом. Но это не то, как вы извлекаете элемент, который удовлетворяет условию

Из документов: https://docs.python.org/3/library/functions.html#any

любой (итерация)
Верните True, если какой-либо элемент итерируемого равен true. Если итерация пуста, вернуть False.

В вашем случае, поскольку условие выполнено, оператор print будет выполняться, как показано ниже. Но так как word находится только в рамках генератора внутри any , вы получите ошибку NameError: name 'word' is not defined.
Также вы не должны называть вашу переменную 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

Если вы хотите найти список слов, удовлетворяющих условию, вы должны использовать цикл 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']


В соответствии с вашим требованием, я думаю, вы должны использовать только filter вместо любого. Код ниже должен работать.

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

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

Есть идеи?

10000