Как работает "а не c.append (x)" здесь? - PullRequest
0 голосов
/ 17 января 2019

Попытка решить простое упражнение: найти общую часть двух списков без повторений, используя понимание списка. Нашел решение в Интернете, но не понял в последнюю очередь. Это составной фильтр, но я не понимаю, как "not c.append (elem)" преобразуется в логическое значение.

from random import randrange

a = []
b = []
c = []

for x in range(randrange(15, 20)):
    a.append(randrange(1, 20))
    b.append(randrange(1, 20))

a.sort()

print(a)
print(b)

c = [elem for elem in a if elem in b and elem not in c and not c.append(elem)]
print(c)

Это только о "а не c.append (elem)".

Ответы [ 2 ]

0 голосов
/ 17 января 2019

используется только для добавления элемента

c.append(elem) = None

не c.append (elem) всегда True

0 голосов
/ 17 января 2019

Разберите это на части:

... 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)
...