2011-03-03 26 views
18

我有這個簡單的代碼返回標題中的內容。爲什麼陣列不打印?這不僅僅是一個itertools問題我也注意到它只是返回對象位置的其他代碼。Python在0x10049b470處返回`<itertools.combinations對象>` - 如何訪問此?

這是代碼。我正在運行2.7.1,一個enthought分配(pylab) - 使用它的類。

import itertools 

number = [53, 64, 68, 71, 77, 82, 85] 

print itertools.combinations(number, 4) 
+1

我把你的問題標記爲'家庭作業',因爲你提到'使用它作爲課堂' - 讓我知道如果這實際上不是這個特定的問題。 – phooji 2011-03-03 03:19:40

回答

26

它不打印簡單列表,因爲返回的對象不是列表。如果您確實需要列表,請在其上應用list函數。

print list(itertools.combinations(number, 4)) 

itertools.combinations返回迭代器。迭代器是可以應用for的東西。通常,迭代器的元素一經獲取就會被計算出來,因此不會將所有內容複製到內存中,這與list不同。

+0

是否有像.next()函數來獲取下一個元素?沒有使用for循環,我不想複製整個東西到內存 – Curious 2017-11-30 15:52:56

+0

@Curious是的,調用'下一步(C)',其中'C'是組合迭代器。 – kennytm 2017-11-30 17:07:05

+0

謝謝@kennytm,假設我不能訪問第10個索引是正確的,除非我調用10次'next'? – Curious 2017-12-01 00:12:59

9

試試這個:

for x in itertools.combinations(number, 4): 
    print x 

或更短:

results = [x for x in itertools.combinations(number, 4) ] 

基本上,所有的itertools模塊函數返回此類型的對象。這個想法是,不是預先計算一個答案列表,而是返回一個可以「知道」如何計算答案的可迭代對象,但除非被問到否則不會這樣做。這樣,計算元素沒有顯着的前期成本。另見this very good introduction to generators

相關問題