使用Permutationed列表(制作pass_word列表)

时间:2017-08-02 20:56:02

标签: python

我想创建一个pass_word列表,假设我创建了一个Permutationed列表,例如:

@@
@#
#@
##

然后我想为它添加另一个字符(例如:a,b) a,b在此代码中被命名为特殊字符并且#@添加了字符

所以我想最终得到这个清单:

ab@@ , ab@#,ab#@,ab## , ba@@, .... a@#b,...,b##a , ... , ba##
  

注意:我不希望任何特殊字符在ex i中重复   不想要aa@# or bb#@a,b不能复制,因为它们是   特殊字符 #or @可以重复,因为它们是添加的字符

代码:

    master_list=[]
l=[]

l= list(itertools.combinations_with_replacement('@#',2)) # get me this list :[(@,@),(@,#),(#,@),(#,#)]


for i in l:
 i = i+tuple(s)  # adding special char(1 in this example) to created list
 master_list.append(i)


print (master_list) # now i have this list : [(@,@,1),(@,#,1),....(#,#,1)

现在如果我可以获得master_list的所有排列,我的问题就可以解决,但我无法解决这个问题

2 个答案:

答案 0 :(得分:0)

我解决了我的问题,我的想法:首先,我生成添加的字符**(#,@)**的所有可能的排列并将它们保存到列表中,然后创建另一个列表并保存特定的字符( a,b)现在我们必须列出我们需要合并它们并最终使用permute_unique function

 def permute_unique(nums):
        perms = [[]]
        for n in nums:
            new_perm = []
            for perm in perms:
                for i in range(len(perm) + 1):
                    new_perm.append(perm[:i] + [n] + perm[i:])
                    # handle duplication
                    if i < len(perm) and perm[i] == n: break
            perms = new_perm
        return perms



   l= list(itertools.combinations_with_replacement(algorithm,3))

    for i in l:
     i = i+tuple(s) # merge 
     master_list.append(i) 

print(list(permute_unique))

答案 1 :(得分:0)

您可以将“已添加”字符的combinations_with_replacement与这些组合的所有permutations和“特殊”字符合并:

>>> special = "ab"
>>> added = "@#"
>>> [''.join(p) 
     for a in itertools.combinations_with_replacement(added, 2) 
     for p in itertools.permutations(a + tuple(special))]
['@@ab',
 '@@ba',
 '@a@b',
 ...
 'a@b@',
 'ab@@',
 ...
 '#@ab',
 '#@ba',
 ...
 'ba##',
 'ba##']

如果您想防止重复,请将内部permuations传递给set

>>> [''.join(p) 
     for a in itertools.combinations_with_replacement(added, 2) 
     for p in set(itertools.permutations(a + tuple(special)))]