Добрый день.
Есть вопрос, мне кажется, что он не особо сложный, но чёткого ответа я не нашёл, примеров миллион, да всё не то. Может я не правильно спрашиваю, потому пишу вам.
Есть у меня два списка, список 2 («list2»), может быть совсем пустым:
list1 = [‘one’, ‘two’, ‘three’, ‘six’]
list2 = [‘one’, ‘two’, ‘four’]
я хочу сравнить оба списка и если элемент из первого списка есть во втором, то я хочу этот элемент поместить в переменную «А», а если же нет такого элемента, то поместить искомый элемент в переменную «А1». Ну и так для всех элементов первого списка, только там, соответственно, если ДА, то в «В», если НЕТ, то в «В1» и т.д..
Подскажите пожалуйста, как это организовать.
Python 3.8
Дополнение:
Вот всё, что я хотел сделать и как это сейчас работает, может это прояснит ситуацию полностью.
Это нужно для мониторинга.
У меня есть определённая команда, которая выполняется на определённом сервере (все подробности приведу в коде ниже), команда эта получает список подключенных компонентов к серверу. Выглядит это так: “
компонент1
компонент2
компонент3
компонент4
компонент5”
В идеале их должно быть пять (это значит, что сервер работает правильно), но может быть и ноль.
после выполнения команды, я хочу взять полученный список (список2) и сверить его со списком для идеального состояния (список1). Далее, для каждого члена “списка1”, может существовать два состояния, он либо есть в “списке2”, либо нет, но в любом случае я должен получить результат сравнения этого элемента в отдельную переменную. Почему именно в отдельную переменную, потому как мне дальше необходимо передать состояние каждого компонента отдельно на систему мониторинга. Списком передавать нельзя, система не понимает, что с этим делать, она воспримет этот список как одно значение.
Так же, система мониторинга, в зависимости от полученного состояния компонента, выполняет разные действия, например: если “компонент1” отсутствует, значит система мониторинга сообщает об этом на почту и запускает команду на перезапуск “компонента1”.
Вот собственно код моего решения, которое, в принципе, работает как я хочу, но этот вариант очень плохой.
import subprocess
#list1 = ['компонент1', 'компонент2', 'компонент3', 'компонент4', 'компонент5']
list2 = subprocess.getoutput("echo dump | nc localhost 2320 | tr -s '/' | cut -f 4 -d '/' | tr -s '#' | cut -f 2 -d '#' | sort | uniq -d'")
for i in list2:
if 'компонент1' in list2:
comp1 = 'компонент1'
else:
comp1 = 'not in list'
if 'компонент2' in list2:
comp2 = 'компонент2'
else:
comp2 = 'not in list'
if 'компонент3' in list2:
comp3 = 'компонент3'
else:
comp3 = 'not in list'
if 'компонент4' in list2:
comp4 = 'компонент4'
else:
comp4 = 'not in list'
if 'компонент5' in list2:
comp5 = 'компонент5'
else:
comp5 = 'not in list'
print(f"comp1: {comp1}\ncomp2: {comp2}\ncomp3: {comp3}\ncomp4: {comp4}\ncomp5: {comp5}\n")
Вы можете подумать, что раз меня устраивает этот вариант, то можно так и оставить и не морочить никому голову, но нет, мне бы хотелось, всё таки, сделать именно автоматическое сравнение двух списков, с последующей передачей состояния каждого компонента, потому как у меня есть и другие команды, которые получают другие списки и с ними нужно делать то же самое. Для каждого писать такой же “ручной” код, как выше - это очень неправильно и затратно по времени.