我还没有找到答案。对不起,如果它很常见。我有点新手。
我正在为这样的循环创建(创建字典脚本):
for i1 in range(len(n)):
for i2 in range(len(n)):
for i3 in range(len(n)):
for i4 in range(len(n)):
for i5 in range(len(n)):
for i6 in range(len(n)):
word = n[i1] + n[i2] + n[i3] + n[i4] + n[i5] + n[i6]
我想创建一个递归版本,我可以在其中选择循环次数。所以,如果我有一个更大的词,它就足够了。 我稍后会需要指针变量(用于创建单词),所以我想在使用动态变量[尽管不知道它是否可能]
n = len(string)
def loop(n): #'n' is a string and the length would be the number of recursions
if n > 0:
var1 [defining my dynam. var]
for var1 in range(len(string)):
loop(n-1)
else:
return word() #I guess I know how to code this one
所以..我想让var1,var2,var3等变量放入我的for。 欢迎任何帮助/指示! 提前谢谢!
编辑: 对不起,试图理解它的麻烦。 好吧,我不确定我是否应该这样做(我应该删除上面的内容吗?)。我设法创建了我想要的迭代版本:输入一个字符串并打印一个列表,其中包含与这些字符的所有可能组合。
使用以下功能,我得到了我想要的输出,但它限制为6个字符。我想使用递归版本,它将能够获得任何输入并根据需要创建尽可能多的循环。 [现在更好解释一下?]
我的实际脚本如下(我知道有更好的方法可以进行过滤/检查):
def rec():
word = ""
txtfile = open(arq,'w') #arq is the string input + .txt
s=0 #Counts the number of words writen
t=0 #tests if the word exists
for i1 in range(len(n)):
for i2 in range(len(n)):
for i3 in range(len(n)):
for i4 in range(len(n)):
for i5 in range(len(n)):
for i6 in range(len(n)):
#This is a filter for not repeating the same character in a word
if not (i1 == i2 or i1 == i3 or i1 == i4 or i1 == i5 or i1 == i6 \
or i2 == i3 or i2 ==i4 or i2 == i5 or i2 ==i6 \
or i3 == i4 or i3 == i5 or i3 == i6 \
or i4 == i5 or i4 == i6 \
or i5 == i6 ):
word = n[i1] + n[i2] + n[i3] + n[i4] + n[i5] + n[i6]
txtfile.close()
data_file = open(arq)
#This one search for the word in the file, for not having duplicates
for line in data_file:
if line == word + "\n" :
t = 1
else:
pass
data_file.close()
if not t == 1:
s+=1
txtfile = open(arq,'a')
txtfile.writelines(word + "\n")
t=0
print ("Number of words writen:",s)
我的输出" eeeeee"只是一个字符串,就像一个例子。 徽章的第一个是: 徽章 badgse badegs badesg badsge badseg bagdes bagdse bageds bagesd bagsde bagsed baedgs
非常感谢您的反馈!
答案 0 :(得分:0)
我不是100%肯定你在这里尝试的成就。在你当前的代码中你想做什么?
例如,如果你有“CAT”这个词你会得到以下结果:
CCC,CCA,CCT,CAC,CAA,CAT,CTC,CTA,CTT
ACC,ACA,ACT,AAC,AAA,AAT,ATC,ATA,ATT
TCC,TCA,TCT,TAC,TAA,TAT,TTC,TTA,TTT
这将是每次迭代的单词结果(只有在每次分配后打印时才会出现这种情况)但是如所述的那样,单词将与ultimatley等于TTT。
请您扩展您想要的最终结果。
还有更好的方法在python中处理字符串,请查看本文档以获取更多信息http://docs.python.org/library/stdtypes.html#sequence-types-str-unicode-list-tuple-bytearray-buffer-xrange
此致 乔
答案 1 :(得分:0)
我们制作了一个脚本,在课堂列表中创建所有排列,它可以帮助你:
class Permutations :
def __init__( self , blist ) :
self.alist=blist
self.permut_list = []
self.permutation(len(self.alist))
def swap(self , blist , i , j ) :
blist[i], blist[j] = blist[j] ,blist[i]
def permutation(self, taille):
if taille == 1 :
self.tmp = self.alist[:]
self.permut_list.append(self.tmp)
else :
for i in range(taille) :
self.swap(self. alist , i , taille −1)
self.permutation(taille −1)
self.swap(self.alist , i , taille −1)
def __repr__(self):
repre = """"""
for i in self.permut_list:
repre += ''.join(i)+"\n"
return repre
这个代码是以递归的方式构造的,它将列表的第i个字符放在最后,使用swap,然后置换其余的,而其余的len大于1,当它是,它替换t第i个元素在他的正确位置并转到下一个元素。
你可以用以下方式打电话给这个班级:
text = "abc"
text_list = []
for i in range(len(text)):
text_list.append(text[i])
permu_text = Permutations(text_list)
print permu_text