我想生成每个5个字符的字符串两个列表的排列
List 1: [A-Z] all caps Alphabets
List 2: [0-9] Digits
字符串条件
示例输出:
B9B61
6F084
7C9DA
9ECF9
E7ACF
我尝试过此操作,但我知道到目前为止我无法应用条件,现在非常困惑请帮助
from itertools import permutations
perm = [''.join(p) for p in permutations('ABCDEFGHIJKLMOPQRSTUVWXYZ0123456789', 5)]
for i in list(perm):
with open("list.txt", "a+") as file:
file.write(i)
file.write("\n")
您可以通过应用一些检查来选择permutations
:
from itertools import permutations
from collections import Counter
for i in permutations('ABCDEFGHIJKLMOPQRSTUVWXYZ0123456789', 5):
combo = "".join(i)
result = Counter(i)
if any(s>=3 for s in result.values()) \
or sum(c.isdigit() for c in i)<1 \
or sum(c.isalpha() for c in i)<1:
continue
print (combo)
以下将打印出所有大写字母和数字的全部5个字符组合,且任何字符或数字均不超过3。
import string
import itertools
possible_combinations = itertools.permutations(string.ascii_uppercase * 3 + string.digits * 3, 5)
for possible_str in (''.join(chars) for chars in possible_combinations):
if possible_str.isnumeric() or possible_str.isalpha():
continue
else:
print(possible_str)
要获得字母和数字的所有组合,并且首先重复不超过3个,我们看一下itertools.permutations
。给定一个可迭代的字符(字符串),它将返回给定长度的那些字符的所有组合。
>>> [''.join(x) for x in itertools.permutations('ABC', 3)] ['ABC', 'ACB', 'BAC', 'BCA', 'CAB', 'CBA']
如果我们传递每个字符3个,排列将返回所有组合,每个字符最多3个
要做的最后一件事是过滤掉没有数字或字母的字符串。如果所有字符都是数字,则string.isnumeric()返回true;如果所有字符都是字母,则string.isalpha()返回true。