在python 3中使用map

时间:2013-03-27 01:31:22

标签: python

嗨,这段代码适用于python 2.7,但不适用于python 3

import itertools
def product(a,b):
    return map(list, itertools.product(a, repeat=b)
print(sorted(product({0,1}, 3)))

输出

  [[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 1, 1], [1, 0, 0], [1, 0, 1], [1, 1, 0], [1, 1, 1]]

在python 2.7中,但是在python 3中,它给出了0x028DB2F0处的map对象 有没有人知道如何改变它为python 3工作所以输出保持与python 2.7相同

2 个答案:

答案 0 :(得分:2)

只需用这样的方式将它包装起来:

import itertools

def product(a,b):
    return list(map(list, itertools.product(a, repeat=b))

print(sorted(product({0,1}, 3)))

查找更多Getting a map() to return a list in Python 3.x

用Python 3 map中的两个单词

  

返回一个迭代器,它将函数应用于每个iterable项,   产生结果。

在python 2.7中它

  

将函数应用于iterable的每个项目并返回一个列表   结果

答案 1 :(得分:1)

在Python 3中,map()内置函数返回一个迭代器而不是一个列表,其行为有点像Python 2 itertools.imap()函数。

如果需要列表,可以将该迭代器传递给list()。例如:

>>> x = map(lambda x: x + 1, [1, 2, 3])
>>> x
<map object at 0x7f8571319b90>
>>> list(x)
[2, 3, 4]