とCHAR_LIST
の範囲内で、動的文字セットのすべての組み合わせを生成しようとしています。以下に貼り付けたコードは機能しますが、非常に非効率的であると感じており、できるだけ高速にしたいと考えています。lower
upper
たとえば、"aab" と "zzz" の間で小文字のアルファベットのみを含むリストを生成したい場合、次のように出力されます。['aab', 'aac', 'aad', ..., 'zzy', 'zzz']
不明な点がある場合は、コメントを残してください。明確にします。ありがとう!
私が今働いているもの。
def generate_list(lower, upper):
result = [lower]
while lower != upper:
if CHAR_LIST.index(lower[len(lower)-1:len(lower)]) + 1 < len(CHAR_LIST):
lower = lower[:len(lower)-1] + CHAR_LIST[CHAR_LIST.index(lower[len(lower)-1:len(lower)]) + 1]
else:
new_lower = ""
new_dig = 0
inc_next = True
for i in lower[::-1]:
if i == CHAR_LIST[len(CHAR_LIST)-1] and inc_next:
new_lower += CHAR_LIST[0]
new_dig += 1
else:
if inc_next:
inc_next = False
new_lower += CHAR_LIST[CHAR_LIST.index(i) + 1]
else:
new_lower += i
if new_dig == len(lower):
lower = str(CHAR_LIST[0])*int(len(lower)+1)
else:
lower = new_lower[::-1]
result.append(lower)
return result
編集:これは課題の一部であるため、開始点と終了点の長さが異なるリストも計算する必要があることを追加するのを忘れていました。たとえば、"a" と "zzz" の間のリストも計算する必要があります。改訂が遅れて申し訳ありません。これまでの創造的な回答に感謝します:)