Python

Является ли грамотным такой код python?

Он определяет не совпадающие элементы в списках

l3 = [50, 75, 30, 20, 40, 69]
l1 = [10, 20, 30, 40, 50]
res = [x for x in l1 + l3 if x not in l1 or x not in l3]
print(res)
Приведенный код не является хорошим способом обнаружения несоответствующих элементов в двух списках. Причина в том, что строка res = [x для x в l1 + l3, если x не в l1 или x не в l3] проверяет, нет ли элемента в l1 или не в l3, что означает, что она добавит все элементы, которых нет ни в одном из списков, даже если они присутствуют в обоих списках.

Лучшим способом выполнить эту задачу было бы использовать set data type и set method difference().
 l1 = [10, 20, 30, 40, 50] 
l2 = [50, 75, 30, 20, 40, 69]

result = list(set(l1).difference(l2)) + list(set(l2).difference(l1))
print(result)
Это создаст набор из l1 и l2, а затем использует метод difference() для получения несоответствующих элементов. Результатом будут элементы, уникальные для l1 и уникальные для l2.

Приведенный выше код более удобочитаем, эффективен и даст правильный вывод для задачи обнаружения несоответствующих элементов в списках.

Важно отметить, что метод difference() возвращает набор, поэтому вам нужно преобразовать его обратно в список, если вы хотите его распечатать.

Также стоит отметить, что это решение сохраняет порядок списков, не гарантируется, что порядок элементов в списках будет сохранен, если вы хотите сохранить порядок, вам следует рассмотреть возможность использования других структур данных, таких как deque из коллекций.
Алексей Зотов
Алексей Зотов
16 137
Лучший ответ
"Грамотность" - это синтаксис.
Если твой код запускается, значит, он "грамотный". Все остальное с этой точки зрения абсолютно вторично.
Что касается алгоритма, то лично я бы просто вычел из объединения множеств их пересечение, а не страдал с этими циклами. "Зачем программистам математика" в действии.
Omarbek Каlten
51 908
В Питоне больше принято такие штуки делать например так
res = list(set(l3) ^ set(l1))
Denis Неизвестно
Denis Неизвестно
97 375