2013-05-20 4 views
3

Мне интересно, как следующий результат даст True?Результаты метода Python any()

>>> x=['0'] 
>>> valid_diff=['0','1','2','3'] 
>>> result =any(x for each in x if x in valid_diff) 
>>> result 
False 

Я бы ожидал, что результат будет Истиной, так как первый элемент будет True.

Любые мысли, я уверен, им не хватает что-то здесь ..

+0

Это неправильно: вы никогда не используете каждый, так что это не имеет значения, что значения. – kampu

+1

'для каждого'? Это действительно то, что вы имели в виду? – kojiro

+0

Также, если вы собираетесь это сделать, вы можете захотеть превратить 'valid_diff' в' set'. Это займет это от операции O (N * M) до операции O (N) (где N = len (x), M = len (valid_diff)) – mgilson

ответ

3

Помимо опечатки, я думаю, что здесь нет необходимости хранить each, просто используйте:

#returns True if any item in x is found in valid_diff 
>>> any(each in valid_diff for each in x) 
True 

или строго придерживаться того, что вы пытаетесь сделать, а затем использовать это:

any(each in valid_diff and each for each in x) 
#will return `True` only if any item found in valid_diff is a Truth value as well. 

Truth Value Testing

+0

Это дает другой результат, если первый 'каждый', который является' in valid_diff', является ложным. Не заботясь о выборочных данных OP, я, честно говоря, сомневаюсь, что это важно для большинства проблем, и это имеет смысл таким образом, но это не может повредить, чтобы быть в курсе. – delnan

+0

@ delnan Хорошая точка, я думаю, что если мы придерживаемся того, что пыталось сделать OP, то 'any (каждый в valid_diff и каждый для каждого по x)' кажется правильным. –

6

Вы сделали опечатку с именами переменных, вы должны проверять if each in valid_diff не if x in valid_diff и each for each не x for each

+0

Чтобы развернуть это:' if x in valid_diff' ищет '['0']' в списке, а не '0 '', поэтому явно ничего не возвращает] – TyrantWave

0

Правильный синтаксис:

>>> result =any(each for each in x if each in valid_diff) 
+2

Или быть менее запутанным,' result = any (xitem for xitem in x if xitem in valid_diff) '. Я думаю, что ОП находится под иллюзией, что 'для каждого' означает что-то особенное. – kampu

+0

Справа. Хотя, я только хотел исправить свой синтаксис в соответствии с переменными, которые он использовал. – kiddorails

Смежные вопросы