1

嗨,这段代码适用于 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 处提供地图对象,有人知道如何更改它以适用于 python 3,因此输出与 python 2.7 中的输出保持相同

4

2 回答 2

2

只需以这种方式将其包装为列表:

import itertools

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

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

在 Python 3.x中获取 map() 以返回列表

Python 3 map 中的两个词

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

在 python 2.7 中

将函数应用于可迭代的每个项目并返回结果列表。

于 2013-03-27T01:34:56.013 回答
1

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

如果你需要一个列表,你可以简单地将该迭代器传递给list(). 例如:

>>> x = map(lambda x: x + 1, [1, 2, 3])
>>> x
<map object at 0x7f8571319b90>
>>> list(x)
[2, 3, 4]
于 2013-03-27T01:35:41.627 回答