我想创建一个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
的所有排列,我的问题就可以解决,但我无法解决这个问题
答案 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)))]