我正在尝试在Python中复制附带的C#代码,但是不幸的是,我对Python的了解比对前者要少得多。该代码本质上会生成2个字符/数字值的列表,例如aa,ab,ac,ad等。它包括A-Z,a-z和0-9的组合。
我研究了django.utils.crypto模块,但这创建了一个随机输出,而我的C#代码输出在运行时给出了确切的组合数量。这是我尝试使用Django模块的方法:
get_random_string(length=2,
allowed_chars=u'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')
我尝试过的其他选项也做了类似的事情,所以我有点茫然。我了解Python的基础知识,但不幸的是,我还没有足够的能力在Python中复制C#代码。 C#代码:
var alpha =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
var q = alpha.Select(x => x.ToString());
int size = 2;
for (int i = 0; i < size - 1; i++)
q = q.SelectMany(x => alphabet, (x, y) => x + y);
foreach (var item in q)
Console.WriteLine(item);
转换为python后,该函数应以2位整数生成大约62 ^ 2个值的组合。
答案 0 :(得分:1)
这是一个例子
alpha = 'abc'
from itertools import permutations, combinations_with_replacement
[''.join(i) for i in list(set(combinations_with_replacement(alpha, 2)) | set(permutations(alpha, 2)))]
# Output -> ['ab', 'ba', 'aa', 'cc', 'bb', 'cb', 'ac', 'ca', 'bc'] which is 3^2
现在按照@Adam Feor在评论中的建议创建alpha
import string
alpha = string.ascii_letters + string.digits
print(alpha)
Output -> abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789