list comprehension c условием 'if not in'

Можно ли сделать list comprehesion из следующего кода в в теле функции:

def func(l):
    li = []
    for i in l:
        if i not in li:
            li.append(i)
    return li

Если нет, тогда почему? Спасибо!


Ответы (2 шт):

Автор решения: Sergey Gornostaev

list comprehesion не должен иметь побочных эффектов, а обращение к li - это работа с состоянием. Если не нужно сохранять исходный порядок элементов, то решается ваша задача элементарно: li = set(l).

→ Ссылка
Автор решения: insolor

List comprehension не может обратиться к списку, который он создает, т.к. этого списка во время работы list comprehension еще не существует.

  • Когда вы заполняете список обычным циклом, вы сначала создаете пустой список, потом добавляете к нему элементы.

  • Когда вы создаете список через list comprehension - эта конструкция просто генерирует набор элементов, потом эти элементы собираются в список.

→ Ссылка