2017-02-04 3 views
0

У меня есть этот список:Почему функция карты не возвращает список без повторяющихся элементов?

list1 = [1, 1, 1, 3, 3, 3, 56, 6, 6, 6, 7] 

И я Ват, чтобы избавиться от повторяющихся значений. Код для функции map берется из here. это полный код тестирования:

list1 = [1, 1, 1, 3, 3, 3, 56, 6, 6, 6, 7] 

list2 = [] 
map(lambda x: not x in list2 and list2.append(x), list1) 
print(list2) 

list2 = [] 
[list2.append(c) for c in list1 if c not in list2] 
print(list2) 

list2 = [] 

for c in list1: 
    if c not in list2: 
     list2.append(c) 

print(list2) 

В Python 2.7 печатает:

[1, 3, 56, 6, 7] 
[1, 3, 56, 6, 7] 
[1, 3, 56, 6, 7] 

В Python 3.4 она печатает:

[] 
[1, 3, 56, 6, 7] 
[1, 3, 56, 6, 7] 

Почему функция map возвращает пустой список в Python3?

+0

Почему вы не используете 'np.unique'? – MMF

+0

Потому что это не производственный код, это для учебных целей :) –

ответ

1

Потому что в a map is не оценивается сразу. Он работает как генератор, где элементы генерируются «на лету» по необходимости: это может быть более эффективным, так как возможно вам, например, нужны только первые три элемента, так почему бы вам рассчитать все элементы? До тех пор, пока вы не делаете материализуете вывод map в некотором роде, вы еще не рассчитали карту.

Вы можете, например, использовать list(..), чтобы заставить Python оценить список:

list(map(lambda x: not x in list2 and list2.append(x), list1))

В этом случае будет генерировать тот же результат для list2.