Как получить значение, которое заставило any () вернуть True? - PullRequest
3 голосов
/ 18 мая 2019

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

4 голосов
/ 18 мая 2019

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

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

любой (повторяемый)
Возвращает 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']

2 голосов
/ 18 мая 2019

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

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

print(list(filter(lambda word: word in lgn, all))) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...