gpt4 book ai didi

python:让所有可能的字母表达到给定的长度

转载 作者:行者123 更新时间:2023-11-28 22:45:23 25 4
gpt4 key购买 nike

def permutations(iterable, r=None):
# permutations('ABCD', 2) --> AB AC AD BA BC BD CA CB CD DA DB DC
# permutations(range(3)) --> 012 021 102 120 201 210
pool = tuple(iterable)
n = len(pool)
r = n if r is None else r
if r > n:
return
indices = list(range(n))
cycles = list(range(n, n-r, -1))
yield tuple(pool[i] for i in indices[:r])
while n:
for i in reversed(range(r)):
cycles[i] -= 1
if cycles[i] == 0:
indices[i:] = indices[i+1:] + indices[i:i+1]
cycles[i] = n - i
else:
j = cycles[i]
indices[i], indices[-j] = indices[-j], indices[i]
yield tuple(pool[i] for i in indices[:r])
break
else:
return

got = permutations(getAllTheLetters(),4)
cnt = 0
for i in got:
cnt += 1
print ''.join(i)

print cnt

上面没有给出 'zzzz' 或 'zzz'
我需要像下面这样的东西:A B C D..aa, ab, ac, ..啊啊啊……

但是 do_perm() 被硬编码为循环四次,我不想这样做。

def getAllTheLetters(begin='a', end='z'):
beginNum = ord(begin)
endNum = ord(end)
yield ''
for number in xrange(beginNum, endNum+1):
yield chr(number)

def do_perm(l):
s = set()
for a in getAllTheLetters():
for b in getAllTheLetters():
for c in getAllTheLetters():
for d in getAllTheLetters():
to_add = "%s%s%s%s" % (a,b,c,d)
if to_add != "":
s.add(to_add)

return s

got = do_perm(1)
cnt = 0
for i in sorted(got):
cnt +=1
print i
print cnt

最佳答案

您可以简单地使用 itertools.product , 像这样

from itertools import product

def get_strings(letters, max_length):
for i in range(1, max_length + 1):
for value in product(letters, repeat=i):
yield "".join(value)

当你像这样调用它时

print(list(get_strings("ab", 2)))

你会得到

['a', 'b', 'aa', 'ab', 'ba', 'bb']

如果你想获取从az的所有值,你可以像这样调用get_strings

from string import ascii_lowercase
print(list(get_strings(ascii_lowercase, 4)))

注意:这会产生大量字符串,因此您的机器可能会停止响应。如果您只想遍历字符串,请使用 for 循环和 get_strings,如下所示,不要创建列表。

for current_string in get_strings(ascii_lowercase, 4):
# Process the current_string

关于python:让所有可能的字母表达到给定的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28666239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com