2016-02-11 9 views
5

Python kullanan bir kitaptan apriori makine öğrenme algoritmasını öğrenmeye çalışıyorum ve bu öğrenmenin bir parçası olarak şu anda bu sorunla uğraştım: aşağıdaki çalışmıyor,Python - for döngüsünde frozenset girişlerinin bir listesiyle ilgili sorun

Ck = [[1], [2], [3], [4], [5]] 
    for tranid in range(10): 
     for candidate in Ck: 
      print("Printing candidate value: ", candidate) 

Ancak:

aşağıdaki kod yapısı çok iyi çalışıyor görünüyor

Ck = [[1], [2], [3], [4], [5]] 
Ck2 = map(frozenset, Ck) 
    for tranid in range(10): 
     for candidate in Ck2: 
      print("Printing candidate value: ", candidate) 

benim orijinal ITER her eleman haritasına Bir frozenset mümkün, Ck2 " içinde aday için iç döngü (") sadece bir kez yürütür dikkat edin. Bundan sonra asla yürütmez. Frozenset olmadan yukarıdaki kod, iç döngü boyunca 10 kez düzgün bir şekilde ilmek yapar. Ancak, frozenset eşleştirildiğinde, iç döngüyü yalnızca bir kez yürütmek için alabilirim.

Lütfen bunu düzeltmeme yardım edin. Kitap, yinelenen değerleri frozenset ile eşleştirdi, çünkü algoritmanın amaçları için değişebilir olmasını istemiyorlar. Sadece olduğu gibi takip etmeye çalışıyorum.

Anaconda'da (Spyder) Python 3.5.1 kullanıyorum.

Lütfen hem Python hem de Makine Öğrenimi için yeni olduğum için yardım edin.

Teşekkür ve Saygılar, Mahesh.

cevap

5

haritası operatörü repeatily yineleme hangi python3 bir listesini döndürür, ancak bir defalık-iterable yineleyici etmez. python3.x içinde, map python2.x içinde itertools.imap benzeri çalışır.

, sorunu çözmek

Ck2=list(map(frozenset, Ck))) 

kullanıp fazla bilgi ve diğer çözümler için Getting a map() to return a list in Python 3.x görmek için.

+0

Oh wow, çalıştı. Çok teşekkürler :) – user3755648

0

python2.x'de, map işlevi bir liste döndürür. Python3.x map işlevinde, bir eşleme nesnesini, yinelenen bir nesneyi döndürür. Gerçekten de bir yineleyici. İç for döngüsünü bir kez çalıştırdığınızda, yineleyici sona erer, böylece artık bundan bir değer alamazsınız. Python 2.x'te, birçok kez bir listeden değerler alabilirsiniz.

Bunu için revize edilmelidir:

Ck = [[1], [2], [3], [4], [5]] 
for tranid in range(10): 
    Ck2 = map(frozenset, Ck) 
    for candidate in Ck2: 
     print("Printing candidate value: ", candidate) 
İlgili konular