Python, если цикл выдает одну и ту же строку вывода для каждой итерации, как печатать только один раз?

a = [['jimmy', '25', 'pancakes'], ['tom', '23', 'brownies'], ['harry', '21', 'cookies']]
for i in range(len(a)):
    if (a[i][1] == '20' or a[i][1] == '26'):
        print 'yes'
    else:
        print 'Not found'

Этот вывод Not found три раза. Если вывод каждой итерации цикла if одинаков, я хочу, чтобы он перебирал весь список, а затем печатал Not found только один раз.

Если я изменю a[i][1] == '25', и вывод станет:

yes
Not found
Not found

Я хочу напечатать yes, но не Not found.


person koogee    schedule 24.10.2012    source источник


Ответы (1)


может быть, вы ищете цикл for-else.

и, как предложил @Burhan Khalid, вместо этого используйте for i in a, если range(len(a)):

a = [['jimmy', '25', 'pancakes'], ['tom', '23', 'brownies'], ['harry', '21', 'cookies']]
for i in a:
    if (i[1] == '25' or i[1] == '26'):
        print 'yes'
else:
    print 'Not found'

вывод:

yes
Not found

Или, может быть, вы ищете any():

In [200]: if any((i[1]=='25' or i[1]=='26') for i in a):
    print 'yes'
else:    
    print 'not Found'
   .....: 


yes

In [204]: if any((i[1]=='20' or i[1]=='26') for i in a):
    print 'yes'
else:    
    print 'not Found'
   .....: 


not Found
person Ashwini Chaudhary    schedule 24.10.2012
comment
range(len(a)) лучше настроить как for i in a:, чем if i[1] == '25 or i[1] == '26': - person Burhan Khalid; 24.10.2012
comment
Спасибо! Он решает первую проблему. Но он по-прежнему печатает Not found один раз для второй проблемы. Как заставить его печатать только yes для положительных совпадений и ничего для отрицательных совпадений? - person koogee; 24.10.2012
comment
ничего не печатать для отрицательных совпадений, тогда почему вы хотите напечатать Not Found? - person Ashwini Chaudhary; 24.10.2012
comment
@koogee, посмотри, мой отредактированный ответ может быть тем, что ты искал. - person Ashwini Chaudhary; 24.10.2012