我有一份动物名单:
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中的动物是否在文件中。以下是一些场景:
如果找到aList中的所有动物,则确定
如果aList中的所有动物都缺失,那么它仍然可以
如果aList中的某些动物缺失而某些动物没有(例如狮子存在而不是熊猫和大象)那么它就不行了,应该给sys.exit
或其他东西。
以下是我到目前为止的陈述:
#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条陈述。
答案 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))