检查是否缺少某些元素,有些元素不是python

时间:2016-06-14 19:33:41

标签: python

我有一份动物名单:

aList = [animal_lionAnimal, 
animal_elephantAnimal_1, 
animal_elephantAnimal_2,
animal_elephantAnimal_3,
animal_pandaAnimal_1,
animal_pandaAnimal_2]

然后我有一个文件,其中也包含这些动物名称。我通过argumentparser读取文件,然后使用正则表达式查找这些动物(更具体地说是re.finall)。

for aFile in args.filePath:
    contents = open(aFile ).read()

# An example of what the regex tries find in the file: (*animal_elephantAnimal_1()) = 0.0; # some comments
aRegex = re.findall(r'(?:.\s+\(\*)(animal\w+)(?:.[^;]*)', contents)

我想要做的是“验证”以查看aList中的动物是否在文件中。以下是一些场景:

  1. 如果找到aList中的所有动物,则确定

  2. 如果aList中的所有动物都缺失,那么它仍然可以

  3. 如果aList中的某些动物缺失而某些动物没有(例如狮子存在而不是熊猫和大象)那么它就不行了,应该给sys.exit或其他东西。

  4. 以下是我到目前为止的陈述:

    #Remove matching animals
    listHaveElement = list(set(aList) - set(aRegex))
    
    if not listHaveElement: #if list is []
        print "There are no animals name missing ", listHaveElement
    else: #if there are animals missing
        print sys.exit("There are animals missing and they are: {0}".format(listHaveElement))
    

    一些例子:

    animal_lionAnimalAsdf, -> Missing due to wrong name 
    
    animal_elephantAnimal_1, -> not missing  
    
    animal_elephantAnimal_2, -> not missing 
    
    animal_elephantAnimal_3, -> not missing 
    
    animal_pandaAnimal_1Mooo, -> missing due to wrong name 
    
    animal_pandaAnimal_2 -> not missing
    

    不知道如何解决第3条陈述。

1 个答案:

答案 0 :(得分:0)

通常,您可以通过以下方式检查列表A中是否包含列表B的所有元素:

all(a in B for a in A)

如果True的每个元素都在A之内或B为空,则会返回A。如果False中缺少任何单个元素,它将返回A。因此,您可以使用:

if all(animal in aRegex for animal in aList):
    print "There are no animals name missing ", aList
else:
    listHaveElement = list(set(aList) - set(aRegex))
    print sys.exit("There are animals missing and they are: {0}".format(listHaveElement))