ページ 11

[Python]連続した文字列作成

Posted: 2016年4月09日(土) 14:22
by ねこ-*-
Pythonを使って連続した文字列を作成したい。
数字の場合

コード:

for i in range(0,10):
    print unichr(48+i)
小文字の場合

コード:

for i in range(0,26):
    print unichr(97+i)
このようにaaaa~zzzzまで作ることは出来るが、これに数字もまぜて1桁から5桁の文字列を作りたい。
下のように出来るようにしたい。
a,b,・・・z,1,2・・・9,aa,ab,・・・az,a1,a2,・・・

5桁でアルファベット、数字、を使ったすべての通りの文字列を表示出来るようにしたいのですが、どのようなアルゴリズム
を作ればいいのかわかりません。コードで示していただけると嬉しいです。

Re: [Python]連続した文字列作成

Posted: 2016年4月09日(土) 20:56
by みけCAT
高速化を考えなければ、素直に文字数を増やしつつ、各文字数について順番に重複順列を出力していけばいいでしょう。

コード:

import sys

if 'unichr' not in globals():
    unichr = chr

def moziretu(chars, len):
    if len <= 0:
        yield ''
    else:
        for c in chars:
            for s in moziretu(chars, len - 1):
                yield c + s

chars = [unichr(97 + i) for i in range(0, 26)] + [unichr(48 + i) for i in range(0, 10)]
minlen = 1
maxlen = 5

isfirst = True
for l in range(minlen, maxlen + 1):
    for m in moziretu(chars, l):
        if not isfirst:
            sys.stdout.write(',')
        sys.stdout.write(m)
        isfirst = False

sys.stdout.write('\n')
オフトピック
[co​de​=​Python]を用いるとメンバ(?)や括弧が黒くなって隠れてしまう糞仕様対策のため、[co​de​=​text]を使用しています。

Re: [Python]連続した文字列作成

Posted: 2016年4月10日(日) 11:30
by ねこ-*-
みけCATさんありがとうございます。
私が期待していた動作です。
納得しました。ありがとうございました。