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)
正在寻找生成带限定符的字符串组合的最有效方法,
长度为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)