指定された長さの指定された文字(単語)から単語のリストを作成しようとしています。各単語は、指定された文字(単語)と[a..z] [0..9](大文字なし)の組み合わせです。
例:長さ= 5、指定された単語:out(指定された単語の長さ<最大長)
この関数は、outaa、outba、...、out9a、out0a、...、outab、outbb、...、out9b、out0b、...、auta、bouta、... aaout、を含むリストを返す必要があります。バウト..。
残りの文字を[a..z] [0..9]で埋め、指定された単語の位置を1つずつシフトすることを意味します。
私はまだそれを行う方法を考えていますが、まだアイデアを思い付くことができませんでした。誰か助けてくれませんか?
どうもありがとうございます
を使用itertools.product()
して残りの文字を生成し、次に単語の位置を循環collections.deque
させてすべての順列を生成します。
from collections import deque
from itertools import product
from string import ascii_lowercase, digits
def generate_words(start, length, _chars=ascii_lowercase + digits):
remainder = length - len(start)
if remainder < 1:
yield start
return
for letters in product(_chars, repeat=remainder):
combo = deque(letters + (start,))
for _ in range(remainder + 1):
yield ''.join(combo)
combo.rotate()
これはジェネレーターであり、出力をループします。
>>> for word in generate_words('out', 5):
... print word
...
aaout
outaa
aouta
about
outab
bouta
acout
outac
couta
adout
outad
douta
aeout
outae
eouta
afout
outaf
# etc.
または呼び出しlist()
発生上の差ならば単語の多数を格納するために調製することlen(start)
及びlength
開始が3を超えて行くこと(追加の4つの文字が5つの文字が362797056個の組み合わせである、8398080の組み合わせを生成する;式です(36**remainder)*(remainder + 1)
)。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加