2017-02-15 44 views
1

我有以下代码:Python中的所有iterables符合条件

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 

我的问题是,如何检查是否所有iterables符合条件。在这个例子中,列表元素应该匹配regex。我认为,我对这个问题的解决方案是“笨拙”,而不是“优雅”。我正在阅读all(),但因实施失败。

任何建议,以改善此代码?

回答

1

要检查所有迭代匹配,只需要一个标志,假设它们是这样做的,但如果有任何不匹配,则为false。例如(我没有运行这个代码)。

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)