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 шт):
list comprehesion не должен иметь побочных эффектов, а обращение к li - это работа с состоянием. Если не нужно сохранять исходный порядок элементов, то решается ваша задача элементарно: li = set(l).
List comprehension не может обратиться к списку, который он создает, т.к. этого списка во время работы list comprehension еще не существует.
Когда вы заполняете список обычным циклом, вы сначала создаете пустой список, потом добавляете к нему элементы.
Когда вы создаете список через list comprehension - эта конструкция просто генерирует набор элементов, потом эти элементы собираются в список.