2016-02-11 14 views
5

में फ्रोजनसेट प्रविष्टियों की एक सूची का उपयोग करने के साथ समस्या मैं पाइथन का उपयोग करने वाली पुस्तक से अप्रियरी मशीन लर्निंग एल्गोरिदम सीखने की कोशिश कर रहा हूं, और उस सीखने के हिस्से के रूप में, मैं वर्तमान में इस समस्या से फंस गया हूं: काम नहीं करता है,पायथन - लूप

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

हालांकि निम्नलिखित:

निम्नलिखित कोड निर्माण ठीक से काम करने लगता है

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

जब मैं अपने मूल आईटीईआर के हर तत्व मैप एक फ्रोजनसेट में सक्षम, मुझे पता है कि सीके 2 में उम्मीदवार के लिए आंतरिक लूप (") केवल एक बार निष्पादित करता है। उसके बाद यह कभी निष्पादित नहीं होता है। फ्रोजनसेट के बिना उपरोक्त कोड 10 बार आंतरिक लूप के माध्यम से ठीक से लूप करता है। हालांकि, फ्रोजनसेट मैप किए जाने के साथ, मैं आंतरिक लूप को केवल एक बार निष्पादित करने के लिए प्राप्त कर सकता हूं।

कृपया इसे ठीक करने में मेरी सहायता करें। पुस्तक ने जमे हुए मानों को फ्रोजनसेट में मैप किया है क्योंकि वे नहीं चाहते हैं कि यह एल्गोरिदम के प्रयोजनों के लिए उत्परिवर्तनीय हो। मैं बस इसका पालन करने की कोशिश कर रहा हूं।

मैं एनाकोंडा (स्पाइडर) पर पायथन 3.5.1 का उपयोग कर रहा हूं।

कृपया मदद करें, क्योंकि मैं पाइथन और मशीन लर्निंग दोनों में नया हूं।

धन्यवाद और सम्मान, महेश।

उत्तर

5

नक्शा ऑपरेटर python3 में एक सूची नहीं लौटाता है जो आप दोहराया जा सकता है, लेकिन एक बार-बार-बार इटेटरेटर। python3.x में, map python2.x में itertools.imap के समान काम करता है।

मुद्दे को हल, का उपयोग

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

और अधिक जानकारी और अन्य समाधान के लिए Getting a map() to return a list in Python 3.x देखने के लिए।

+0

ओह वाह, कि काम किया। बहुत बहुत धन्यवाद :) – user3755648

0

python2.x में, map फ़ंक्शन एक सूची देता है। Python3.x map फ़ंक्शन में एक मानचित्र ऑब्जेक्ट, एक पुनरावृत्त वस्तु लौटाता है। वास्तव में, एक पुनरावर्तक। जब आप एक बार के लिए आंतरिक for पाश चलाते हैं, तो इटेटरेटर समाप्त हो जाएगा ताकि आप इससे मूल्य प्राप्त नहीं कर सकें। पायथन 2.x में, आप कई बार एक सूची से मूल्य प्राप्त कर सकते हैं।

आप इसे करने के लिए संशोधित करना चाहिए:

Ck = [[1], [2], [3], [4], [5]] 
for tranid in range(10): 
    Ck2 = map(frozenset, Ck) 
    for candidate in Ck2: 
     print("Printing candidate value: ", candidate) 
संबंधित मुद्दे