编写一个程序来生成一个输入字符串的所有潜在的字谜。
例如,"biro“的潜在字谜是
biro bior brio broi boir bori ibor irbo iobr iorb rbio rboi ribo riob robi obir obri oirb orbi orib
我在论坛上找不到对这个问题的具体更正,所以如果这是一个副本,请随时将我发送到我应该看到的主题。
我是个初学者,对Python还不太了解,还没有为这个练习使用正确的函数和方法。我想出这个是为了测试一些东西。但这完全是一团糟,它不能完成工作,不要浪费时间去破解它:
texte = "biro"
liste = list(texte)
n_liste = []
for itera, f in enumerate(liste) :
if f == liste[0]:
n_string = str(liste[itera])+str(liste[(liste.index(f)+1):])
if f == liste[itera] and (itera >= 1):
n_string = str(liste[0])+str(liste[liste.index(f)])+str(liste[(liste.index(f)+1):])
if f == liste[len(liste)-1]:
n_string = str(liste[0])+str(liste[liste.index(f):])
n_liste.append(n_string)
print(n_liste)
要处理的文本应该是输入,而不是str变量。有没有任何有效的方法来找出一个给定字符串的字谜,不管它有多长?(不使用图书馆)
发布于 2021-12-19 13:49:26
您可以制作一个递归生成器:
def anagrams(S,anagram=""):
if not S: # no more characters,
yield anagram # return completed anagram
return
for i,c in enumerate(S): # with each letter at current position
yield from anagrams(S[:i]+S[i+1:],anagram+c) # add sub-anagrams
产出:
for a in anagrams('biro'): print(a)
biro
bior
brio
broi
boir
bori
ibro
ibor
irbo
irob
iobr
iorb
rbio
rboi
ribo
riob
robi
roib
obir
obri
oibr
oirb
orbi
orib
这也可以通过迭代的方法实现(返回列表),从列表中的原始字符串开始,然后通过将字符与其余位置中的字符交换到每个位置,逐步展开列表。
def anagrams(S):
result = [S]
for i in range(len(S)): # position to swap into
result,partial = [],result
for p in partial: # partially expanded so far
for j,c in enumerate(p[i:],i): # swap with each remaining char.
result.append(p[:i]+c+p[i:j]+p[j+1:]) # expanding result
return result
发布于 2021-12-19 13:38:27
def anagrams(values):
result = []
if len(values) == 0:
return [""]
for first_index in range(len(values)):
first = values[first_index]
rest = values[:first_index] + values[first_index+1:]
for rest_permutation in anagrams(rest):
result.append(first + rest_permutation)
return result
# Example
print(anagrams("biro"))
https://stackoverflow.com/questions/70411592
复制相似问题