2015-01-02 1 views
-4

У меня есть много исключений в if линии, как это:записи а, если линия с большим количеством исключения, используя список

if "Aide" not in title and "Accessibilité" not in title and "iphone" not in title and "android" not in title and "windows" not in title and "applications" not in title and "RSS:" not in title: 
    do_stuff() 

Как я могу написать эту строку, чтобы использовать список?

Я пробовал:

for a in ["Aide", "Accessibilité", "iphone" , "android", "windows", "applications", "RSS:"]: 
    if title != a: 
     do_stuff() 

Но этот метод вызывает do_stuff() для каждого a, так что это не то, что я хотел бы ...

Как я могу это делать? Благодаря

+0

Добавьте 'break' после' do_stuff() ', чтобы остановить цикл for после первого совпадения. – Bjorn

+0

'if not (a в [" Aide "," Accessibilité "," iphone "," android "," windows "," applications "," RSS: "]):' это сработает. Не нужно итерации. –

+0

@TanveerAlam, что не обязательно эквивалентно. Я думаю, что OP нуждается в ['all'] (https://docs.python.org/2/library/functions.html#all). – jonrsharpe

ответ

2

Используя предложение jonrsharpe, вы могли бы сделать что-то вроде этого:

titleList = ["Aide", "Accessibilite", "iphone" , "android", "windows", "applications", "RSS:"] 
if all(title != x for x in titleList): 
    do_stuff() 

Edit:

С другой стороны, это намного проще (и именно Танвейер Алам указал это выход):

if title not in titleList: 
    do_stuff() 

Почему я не просто пишу, что в первую очередь ..., вероятно, потребуется некоторое очень серьезное самоанализа.

+0

Оба решения хороши, мне это легче, используя 'all()'. благодаря – Guillaume

2

Вы могли бы написать что-то вроде:

def contains_any(s, it): 
    return any(word in s for word in it) 

if not contains_any(title, ["Aide", "Accessibilité", "iphone" , "android", 
          "windows", "applications", "RSS:"]): 
    ... 
Смежные вопросы