Разберите это на части:
... elem not in c and not c.append(elem)
Эта часть сначала проверяет, находится ли elem
в c
( Примечание : предыдущий c
, объявленный ранее как c = []
), и, если это не так, добавьте его к c
. Так как list.append
всегда возвращает None
, что является ошибочным значением. not
до того, как он инвертирует результат в True
, поэтому элемент также выбирается при понимании списка.
Код эффективно отфильтровывает уникальные общие элементы в a
и b
и эквивалентен следующему коду:
list_comp_result = []
for elem in a:
if elem in b:
if elem not in c:
c.append(elem) # <-- always None
list_comp_result.append(elem)