2013-05-02 8 views
6

मेरा लक्ष्य लंबाई x के सभी संभावित तार (पत्र और संख्या) उत्पन्न करने में सक्षम होना है और प्रत्येक के लिए कोड का एक ब्लॉक सक्रिय करने में सक्षम होना है। (एक पुनरावर्तक की तरह) एकमात्र समस्या यह है कि itertools में एक ही स्ट्रिंग में अक्षर की प्रतिलिपि नहीं बनाते हैं। उदाहरण के लिए:पायथन में सभी संभावित तार कैसे उत्पन्न करें?

मुझे "एएए" के बजाय "एबीसी" "बीएसी" "सीएबी" आदि मिलता है।

कोई सुझाव?

उत्तर

21

उपयोग itertools.product():

>>> import itertools 
>>> map(''.join, itertools.product('ABC', repeat=3)) 
['AAA', 'AAB', 'AAC', 'ABA', 'ABB', 'ABC', 'ACA', 'ACB', 'ACC', 'BAA', 'BAB', 'BAC', 'BBA', 'BBB', 'BBC', 'BCA', 'BCB', 'BCC', 'CAA', 'CAB', 'CAC', 'CBA', 'CBB', 'CBC', 'CCA', 'CCB', 'CCC'] 

ध्यान दें कि सभी संयोजनों से युक्त एक सूची बनाने के लंबे समय तक स्ट्रिंग्स के लिए बहुत अक्षम है - के बजाय उन पर पुनरावृति:

for string in itertools.imap(''.join, itertools.product('ABC', repeat=3)): 
    print string 

सभी पात्रों प्राप्त करने के लिए और संख्या string.uppercase + string.lowercase + string.digits का उपयोग करें।

>>> from itertools import product 
>>> from string import ascii_uppercase 
>>> for combo in product(ascii_uppercase, repeat=3): 
...  print ''.join(combo) 
... 
AAA 
AAB 
... 
ZZY 
ZZZ 

itertools.combinations() और itertools.permutations() अपने काम के लिए सही उपकरण नहीं हैं:

+1

पायथन 3 बदल गया ताकि बिल्टिन 'नक्शा' अब एक पुनरावर्तक लौटाए। 'Itertools.imap' का उपयोग करने का दूसरा सुझाव तब तक जरूरी नहीं है जब तक कि आप पाइथन का संस्करण <3.0 नहीं हैं। – ngoue

+2

प्रश्न टैग किया गया है [टैग: पायथन-2.7] ... – ThiefMaster

+0

आप सही हैं, महोदय! – ngoue

6

उपयोग itertools.product() आप पत्र को दोहराने के लिए चाहते हैं।

संबंधित मुद्दे