2017-02-01 3 views
1

Я пытаюсь избавиться от нежелательных переменных в списке. Мне нужно иметь два условия: один, если убедиться, что значения в моем массиве меньше, чем переменная A, а другая - убедиться, что они не равны другой переменной B.Удаление элементов из списка, если они не соответствуют операторам «если» или «

Эта кодовая доза не работает:

original_Ar = [0,1,2,3,4,5,6,7,8,9,10,11,12] 
new_Ar = [s for s in original_Ar if (s != 2) or (s < 10)] 

print (new_Ar) 

в то время как если бы я разбить его на два заявления (вместо or заявления) - они работают:

original_Ar = [0,1,2,3,4,5,6,7,8,9,10,11,12] 
print ([s for s in original_Ar if (s != 2)]) 
print ([s for s in original_Ar if (s < 10)]) 

Любая идея, как я могу это сделать в одну строку?

+3

попробуйте использовать 'and' вместо' or' – depperm

+3

Из интереса почему вы использовали 'или', так как вы использовали« и », когда вы написали вопрос? – doctorlove

ответ

6

У вас смешанная логическая логика. Вы хотите включить все значения, которые не равны 2 и которые меньше, чем 10:

new_Ar = [s for s in original_Ar if s != 2 and s < 10] 
#   *both* conditions must be true ^^^ 

В противном случае, вы бы включить s = 2, потому что он меньше, чем десять, и вы бы включать s = 11 и s = 12 , потому что оба не равны двум!