首页 > 解决方案 > 如何在 Python 中生成 2 位整数的结构化列表?

问题描述

我试图在 Python 中复制附加的 C# 代码,但不幸的是,我对 Python 的了解比对前者的了解要少得多。该代码实质上会生成 2 个字符/数字值的列表,例如 aa、ab、ac、ad 等。它包括 AZ、az 和 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,该函数应该生成大约 62^2 个 2 位整数值的组合。

标签: c#python

解决方案


这是一个例子

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

现在alpha按照@Adam Feor 在评论中的建议创建

import string 
alpha = string.ascii_letters + string.digits 
print(alpha)
Output -> abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789

推荐阅读