2010-09-14 18 views
11
test = ["a","b","c","d","e"] 

def xuniqueCombinations(items, n): 
    if n==0: yield [] 
    else: 
     for i in xrange(len(items)-n+1): 
      for cc in xuniqueCombinations(items[i+1:],n-1): 
       yield [items[i]]+cc 

x = xuniqueCombinations(test, 3) 
print x 

çıkışları ben buldum tüm kombinasyonları görmek istiyorum Bir nesne olduğunu düşündüğüm yazı nasıl yazdırılır?

"generator object xuniqueCombinations at 0x020EBFA8" 

. Bunu nasıl yapabilirim?

+2

iki şey: http://docs.python.org/library/itertools.html ve http://docs.python.org/glossary.html#term-generator – SilentGhost

cevap

16

leoluk doğru yapmanız gerekenler Üzerinde yineleyin. Eğer bir ilk listede dönüştürebilirsiniz, Alternatif

combos = xuniqueCombinations(test, 3) 
for x in combos: 
    print x 

: Ama burada doğru sözdizimi var

combos = list(xuniqueCombinations(test, 3)) 
print combos 
4

Bu, bir jeneratör nesnesidir. Eğer piton 2.7 veya çalıştırıyorsanız http://docs.python.org/library/pprint.html daha: üzerinde yineleme Erişim için:

for x in xuniqueCombinations: 
    print x 
+0

x in xuniqueCombinations için: TypeError: 'function' nesnesi yinelenen değil – Alex

+3

@Alex Fonksiyonu çağırmanız gerekiyor: x için xuniqueCombinations (test, 3) '. Alternatif olarak sadece baskı listesini yapın (xuniqueCombinations (test, 3)) '. –

+2

Şunu: xuniqueCombinations x (deney, 3) için: – Alex

-3

O pprint modülüne bakmak kullanışlı olabilir

from pprint import pprint 
pprint(x) 
+1

pprint (x) <0x020EBFA8 de jeneratör nesne xuniqueCombinations> farklı değil ... – Alex

0
x = list(xuniqueCombinations(test, 3)) 
print x 

listelemek için jeneratör dönüştürmek ve baskı ......

+0

hakkında en azından bir uyarı olmadan bu konuda yanıt almak etmeyin hafıza etkileri. – Triptych

+0

ohh tamam, ancak birisi, dönüştürücü listeye dönüştürmeden yazdırma için jeneratör nesnesi üzerinde döngü yürütürse, yineleyici tükeneceği için tekrar bu işlevi çağırmadan döngü üzerinde tekrar yürütemez. – shahjapan

İlgili konular