2016-06-14 2 views
0

У меня есть список имен животных:Проверьте некоторые элементы отсутствуют, а некоторые из них не питон

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

Тогда у меня есть файл, который также содержит эти названия животных. Я читаю файл аргументом, а затем использую регулярное выражение для поиска этих животных (точнее, 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 найдены, то его OK

  2. Если все животные из ALIST отсутствуют, то его еще хорошо

  3. Если некоторые животные из 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

В общем, вы можете проверить, если все элементы списка 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)) 
+0

Хм. Но если все они отсутствуют/написаны неправильно в файле, то он не должен «сбой», поскольку он в порядке. Потому что либо все имена животных есть, либо ни один из них. Не может быть половины, а половина - нет. Но похоже, что это решение не выполнимо, так как я сравниваю список с файлом? – gants

+0

@gants Если оба 'aRegex' и' aList' являются списками (на основе вашего вопроса они должны быть), то этот подход будет работать. Если это не так, попробуйте пересмотреть свой вопрос, чтобы уточнить, что каждая переменная – wnnmaw

Смежные вопросы