2013-12-10 4 views
1

Оба приведенных ниже примера являются старыми примерами проблемы, в которой я выполняю итерацию через список чисел, чтобы найти числа, которые соответствуют списку условий, но не смогли найти опрятный способ выразить это, кроме для:Удаление резервных копий/код конденсации

condition1 and condition2 and condition3 and condition4 and condition5 

Два примера выше:

if str(x).count("2")==0 and str(x).count("4")==0 and str(x).count("6")==0 and str(x).count("8")==0 and str(x).count("0")==0: 

if x % 11==0 and x % 12 ==0 and x % 13 ==0 and x%14==0 and x %15 == 0 and x%16==0 and x%17==0 and x%18==0 and x%19==0 and x%20==0: 

есть простой, более изящный способ сделать это?

Моя первая повторная попытка была хранить условия в списке, как показано ниже:

list=["2","4","6","8","0"] 
for element in list: 
    #call the function on all elements of the list 
list=[11,12,13,14,15,16,17,18,19,20] 
for element in list: 
    #call the function on all elements of the list 

, но я надеялся на четной аккуратнее/простым способом.

ответ

3

Вы можете использовать выражение генератор, как этот

def f(n): 
    return x%n 

if all(f(element) for element in lst): 
    ... 

Если функция/расчет не слишком сложным, вы можете просто положить его рядный

if all(x % element for element in lst): 
    ... 
3

Встроенная функция all может упростить это, если вы можете выразить свои условия в выражении генератора:

result = all(x % n == 0 for n in xrange(11, 21)) 

Это возвращает логический результат, указывающий, все ли элементы его итерацию аргумента True, короткое замыкание до конечной оценки, как только False.

Это второй вопрос, который я видел за последний час или около того, для которого all является ответом - должно быть что-то в воздухе.

+0

На самом деле, я был один, кто спросил предыдущий вопрос обо всех, кроме того, что это не имело никакого отношения к этой проблеме! –

+1

Это Python для вас - простые инструменты, которые применимы к удивительно широкому кругу проблем. –

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