Python 3 - понимание списка "если нет в списке" - PullRequest
0 голосов
/ 03 августа 2020

У меня есть список1, содержащий разные целые числа. Теперь я хочу создать второй список (list2), который содержит все элементы list1 без двойников. И я хочу создать list2 с пониманием списка, без необходимости сначала определять его как пустой список:

list1 = [3,3,2,1,5,6,1,5,7]
list2 = [i for i in list1 if i not in list2]
print(list2)

Я знаю, что этот случай идеально подходит для set (). Но почему он не работает с пониманием списка?

В этих потоках я обнаружил, что мой синтаксис list2 должен быть в порядке:

Оба самых популярных ответа предполагают синтаксис типа

[y for y in a if y not in b]

Ответы [ 2 ]

1 голос
/ 03 августа 2020

Это потому, что вы определяете содержимое list2 самореферентно. Хотя синтаксически это правильно, семантически это бессмысленно - list2 еще не определен, когда вы ссылаетесь на него в части фильтра / защиты понимания списка.

0 голосов
/ 03 августа 2020

Я не уверен на 100%, но я считаю, что список не заполнен полностью до тех пор, пока не будет завершено понимание.

Вы могли бы просто сделать это, если бы не использовали понимание списка

List(Set(list1))

Другой вариант (тоже не тот, который вам хотелось)

list1 = [3,3,2,1,5,6,1,5,7]
list2 = []
for itm in list1:
    if itm not in list2:
        list2.append(itm)
...