我有这个清单:
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 :(得分:2)
因为在python-3.x中map
未立即评估。它可以作为一个生成器,通过需要动态生成元素:这可以更高效,因为你可能只需要前三个元素,那么为什么要计算所有元素呢?因此,只要您不以某种方式具体化 map
的输出,您就没有真正计算过地图。
例如,您可以使用list(..)
强制Python评估列表:
list(map(lambda x: not x in list2 and list2.append(x), list1))
在这种情况下,python-3.x会为list2
生成相同的结果。