2017-02-15 18 views
1

я следующий код:Python все итерируемыми соответствуют условиям

from re import match, compile 

list1 = ['AB12345', 'AB12345', 'AB12345', 'AB12345', 'AB12345', 'AB12345', 'AB12345', 'AB12345', 'AB12345'] 
list2 = ['AB12345', 'WLADEK', 'AB12345', 'AB12345', 'STEFAN', 'AB12345', 'AB12345', 'AB12345', 'ZENEK'] 
def iterChecker(list): 
    regex = compile("([A-Z]{2})(\d+)") 
    checker = [] 
    for l in list: 
     if regex.match(l): 
      checker.append(l) 
      if len(checker) == len(list): 
       print("Everything is ok") 
     else: 
      print("Elements that do not match: %s" % l) 

iterChecker(list1) 
print("###################") 
iterChecker(list2) 

Выход:

Everything is ok 
################### 
Elements that do not match: WLADEK 
Elements that do not match: STEFAN 
Elements that do not match: ZENEK 

Мой вопрос, как проверить, если все итерируемыми соответствует условию. В этом примере элементы списка должны соответствовать regex. Я думаю, мое решение этой проблемы «неуклюжие», а не «элегантные». Я читал о all(), но не смог выполнить его.

Все предложения по улучшению этого кода?

ответ

1

Чтобы проверить соответствие всех итераций, просто укажите флаг, который предполагается, но он является ложным, если какой-либо из них не соответствует. Например (я не пропустил этот код).

def iterChecker(list): 
    regex = compile("([A-Z]{2})(\d+)") 
    checker = [] 
    all_match = True 
    for l in list: 
     if regex.match(l): 
      checker.append(l) 
      if len(checker) == len(list): 
       print("Everything is ok") 
     else: 
      all_match = False 
      print("Elements that do not match: %s" % l) 
    if all_match: 
     print("All match") 
+0

я не могу предположить, что они совпадают - для многих позиций в списке, так что я не могу Гест, если она соответствует – Fangir

0

all Используя оператор:

from re import compile 

list1 = ['AB12345', 'AB12345', 'AB12345', 'AB12345', 'AB12345', 'AB12345', 'AB12345', 'AB12345', 'AB12345'] 
list2 = ['AB12345', 'WLADEK', 'AB12345', 'AB12345', 'STEFAN', 'AB12345', 'AB12345', 'AB12345', 'ZENEK'] 

regex = compile("([A-Z]{2})(\d+)") 

print all(regex.match(element) for element in list1) 
print all(regex.match(element) for element in list2)