Python: 生成字符串组合并设置类型数。 (x 长度的字符串,x 数字,x 大写,x 小写)

Python: Generate String Combinations with set count of type. (String of x length with, x numbers, x uppercase, x lowercase)

正在寻找生成带限定符的字符串组合的最有效方法,

长度为16的字符串,有2个数字,8个小写字母,6个大写字母,一种遍历所有组合的方法。

也许使用 itertools.filterfalse 或 itertools.dropwhile?

这是一个可能的解决方案:

from itertools import combinations_with_replacement, permutations, product
from string import ascii_digits, ascii_lowercase, ascii_uppercase
from sympy.utilities.iterables import multiset_permutations

def generator():
    n_gen = combinations_with_replacement(ascii_digits, 2)
    l_gen = combinations_with_replacement(ascii_lowercase, 8)
    u_gen = combinations_with_replacement(ascii_uppercase, 6)
    for numbers, lowercase, uppercase in product(n_gen, l_gen, u_gen):
        for p in multiset_permutations(numbers + lowercase + uppercase):
            yield ''.join(p)

示例(打印 100 个字符串):

g = generator()
i = 0

for s in g:
    if i > 100:
        break
    print(s)
    i += 1

当然不能全部打印出来,太多了!!确实有超过 10^26 个可能的字符串!除非您知道自己在做什么,否则不要与他们一起创建列表。

在线查看源代码here

import random
import string

def get_random_alphanumeric_string(length):
    letters_and_digits = string.ascii_letters + string.digits
    result_str = ''.join((random.choice(letters_and_digits) for i in range(length)))
    print("Random alphanumeric String is:", result_str)

get_random_alphanumeric_string(8)
get_random_alphanumeric_string(8)