2013-04-28 6 views
5

की सूची में कनवर्ट करना itertools क्रमपरिवर्तन फ़ंक्शन का उपयोग करने के बाद किसी सूची के साथ कुछ समस्याएं हैं।tuples की सूची से itertools.permutations के आउटपुट को स्ट्रिंग्स

from itertools import permutations 

def longestWord(letters): 
    combinations = list(permutations(letters)) 
    for s in combinations: 
     ''.join(s) 
    print(combinations) 

longestWord("aah") 

उत्पादन इस तरह दिखता है:

[('a', 'a', 'h'), ('a', 'h', 'a'), ('a', 'a', 'h'), ('a', 'h', 'a'), 
('h', 'a', 'a'), ('h', 'a', 'a')] 

मैं इस एक सरल सूची होना चाहते हैं, लेकिन यह tuples की एक सूची के रूप में बाहर आ जा रहा है (?)। किसी को भी मदद कर सकते हैं मुझे इस प्रारूप तो यह निम्नलिखित के रूप में बाहर आता है:

['aah', 'aha', 'aah', 'aha', 'haa', 'haa'] 
+2

क्रमपरिवर्तन कॉलिंग 'combinations' भ्रामक है। – DSM

उत्तर

8
from itertools import permutations 

def longestWord(letters): 
    return [''.join(i) for i in permutations(letters)] 

print(longestWord("aah")) 

परिणाम:

['aah', 'aha', 'aah', 'aha', 'haa', 'haa'] 

कुछ सुझाव:

  1. फ़ंक्शन के अंदर प्रिंट न करें, इसके बदले वापस लौटें और लौटाए गए मूल्य को प्रिंट करें।
  2. चर combination का आपका नामकरण के रूप में संयोजन क्रमचय से अलग है, अच्छा नहीं है
  3. से जुड़ने का आपका कुछ भी करने से नहीं किया गया था, में शामिल होने के मूल्य इनलाइन परिवर्तन नहीं करता है, यह स्ट्रिंग रिटर्न
  4. समारोह नाम का प्रतिनिधित्व नहीं करता यह क्या करता है। सबसे लंबा शब्द?
0

परम्युटेशन्स पुनरावर्तक tuples उपज ताकि आप उन्हें शामिल होने की आवश्यकता देता है। नक्शा आपके फॉर-लूप के बजाय ऐसा करने का एक अच्छा तरीका है।

from itertools import permutations 

def longestWord(letters): 
    combinations = list(map("".join, permutations(letters))) 
    print(combinations) 

longestWord("aah") 

जिस तरह से आप यह क्या कर रहे थे, आप एक ही स्ट्रिंग में प्रत्येक टपल में पत्र में शामिल होने गया था लेकिन संयोजन सूची में फेरबदल नहीं किया गया।

0

ऐसा करें:

combinations = permutations(letters) 
print [''.join(x) for x in combinations] 

(। आपका join वास्तव में कुछ कर रहा था नहीं उपयोगी - के बाद शामिल किया गया था इसकी वापसी मान सहेजा नहीं गया था)

+0

'सूची' यहां आपको कुछ भी नहीं खरीदता – Eric

+0

हां, संदर्भ के लिए ओपी से उस पंक्ति की प्रतिलिपि बनाई गई। –

0

एक लाइनर

[''.join(h) for h in [list(k) for k in longestWord("aah")]] 
संबंधित मुद्दे