2013-03-27 36 views
1

您好此代碼的工作在python 2.7但不在蟒3使用地圖在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

回答

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地圖

返回適用功能,可迭代的每一個項目的迭代器, 產生的結果。

雖然在Python 2.7它

應用功能的可迭代每個項目並返回 結果列表。

+0

由於這種變化使工作 – user2210605 2013-03-27 01:47:14

+0

@歡迎您user2210605 – 2013-03-27 01:47:37

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]