2013-12-09 3 views
0

Это часть моего кода:Python, если/Элиф упрощение

for line in f: 
    if animals[0].upper() in line: 
     break 
    elif animals[1].upper() in line: 
     break 
    elif animals[2].upper() in line: 
     break 
    elif animals[3].upper() in line: 
     break 
    elif animals[4].upper() in line: 
     break 
    elif animals[5].upper() in line: 
     break 
    elif animals[6].upper() in line: 
     break 
    elif animals[7].upper() in line: 
     break 
    elif animals[8].upper() in line: 
     break 
    elif animals[9].upper() in line: 
     break 
    elif animals[10].upper() in line: 
     break 
    print(line) 

Я просто пытаюсь понять, если она может быть упрощена так или иначе, но я действительно не могу придумать что-нибудь. Есть предположения?

Спасибо!

+0

Попробуйте использовать цикл, который увеличивается до 10 и использует его вместо цифр. – Broxzier

ответ

8

Вот полностью эквивалентный фрагмент кода к тому, что у вас есть выше:

if any(animals[x].upper() in line for x in range(11)): 
    break 

Предполагая, что animals поддерживает протокол итератора (который, скорее всего, правда), даже лучшим решением было бы сделать что-то вроде этого:

if any(animal.upper() in line for animal in animals): # slice animals as necessary 
    break 
+0

'if line in map (str.upper, animals [: 11])'? –

+2

@JonClements - Я так не думаю. 'line =" badger '; animals = ["badgers"] '. Yours возвращает' True', OP возвращает 'False'. (Предполагается, что животные находятся в линии, а не линии у животных). не работает на python3.x ;-) – mgilson

+1

черт возьми, вы избили меня до этого: P –

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