嗨,这段代码适用于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相同
答案 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]