为什么map函数不返回没有重复元素的列表?

时间:2017-02-04 17:02:57

标签: python-2.7 list python-3.4

我有这个清单:

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中返回一个空列表?

1 个答案:

答案 0 :(得分:2)

因为在map 未立即评估。它可以作为一个生成器,通过需要动态生成元素:这可以更高效,因为你可能只需要前三个元素,那么为什么要计算所有元素呢?因此,只要您不以某种方式具体化 map的输出,您就没有真正计算过地图。

例如,您可以使用list(..)强制Python评估列表:

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

在这种情况下,会为list2生成相同的结果。