0

この辞書を考えると

dictt={2:'abc',3:'def',4:'gfi',5:'jkl',6:'mno',7:'pqrs',8:'tuv',9:'wxyz'}

カスタム順列を実行する必要があります。

入力の数値は、出力の長さを示します。

入力は、並べ替えられている文字も指します。

例えば。「34」を指定すると、プログラムは最初のシーケンスの最初の文字を返し、2番目のシーケンスの3文字すべてを1つずつ追加します。a + d = ad a + e = ae a + d = af次に、最初のシーケンスの2番目の文字を取得し、2番目のシーケンスの3文字すべてを追加しますb + d = bd b + e = be b + f = bf次に、3番目の文字c + d = cd c + e = ce c + f = cfなので、uが34と入力すると、入力が3つの数字の場合、ad ae af bd be bf cdcecfが返されます。入力が1つの数値の場合、出力は3のペアになります。その場合、出力はリストされている対応するシーケンスになります。ex: "2" would return a b c

def permuteString(numString):
    array=[]
    original={2:'abc',3:'def',4:'gfi',5:'jkl',6:'mno',7:'pqrs',8:'tuv',9:'wxyz'}
    for a,b in original.iteritems():
        print a,b
        for c in b:
            print c

    return array

stuff=permuteString("234")

これまでのところ、辞書を抜くだけでした

4

2 に答える 2

3

ジェネレータークラスとして書かれています:

import itertools

class PhoneWords(object):
    letters = {
        2: 'abc',
        3: 'def',
        4: 'ghi',
        5: 'jkl',
        6: 'mno',
        7: 'pqrs',
        8: 'tuv',
        9: 'wxyz'
    }

    def __init__(self, num_string):
        self.num = [int(i) for i in num_string]                 # => [3, 4]
        self.chars = [PhoneWords.letters[i] for i in self.num]  # -> ['def', 'ghi']

    def __iter__(self):
        return (''.join(letters) for letters in itertools.product(*self.chars))

そして使用中:

for word in PhoneWords("34"):
    print word

戻り値

dg
dh
di
eg
eh
ei
fg
fh
fi
于 2012-06-08T16:22:00.443 に答える
0

これはあなたが望んでいることだと思います:

>>>from itertools import product
>>>def permuteString(numString):
>>>    original = {2:'abc',3:'def',4:'gfi',5:'jkl',6:'mno',7:'pqrs',8:'tuv',9:'wxyz'}
>>>    #extract the wanted string, for example input numString='23', the pools is ['abc', 'def']
>>>    pools = [original[int(n)] for n in numString]                                                 
>>>    return (''.join(x) for x in product(*pools)) #return a generator   

そして、このように使用します

>>>for x in permuteString('23'):
>>>    print x
ad
ae
af
bd
be
bf
cd
ce
cf

詳細:

product :入力イテラブルのデカルト積

generator :イテレータを作成するためのシンプルで強力なツール

join : リストに参加できます。例:

x = ['a', 'b', 'c', 'd']
print ''.join(x)

これは次のように出力されます。

'abcd'
于 2012-06-08T02:23:02.500 に答える