我的最终目标是将以下 python 代码转换为 C#,但我想通过学习 python 语法自己完成。我了解代码是递归的。
代码生成具有 k 个变量的 n 次多项式。更具体地说,每个变量的指数列表。
def multichoose(n,k):
if k < 0 or n < 0: return "Error"
if not k: return [[0]*n]
if not n: return []
if n == 1: return [[k]]
return [[0]+val for val in multichoose(n-1,k)] + \
[[val[0]+1]+val[1:] for val in multichoose(n,k-1)]
这是我到目前为止的转换:
public double[] MultiChoose(int n, int k)
{
if (k < 0 || n < 0)
{
throw new Exception();
}
if (k == 0)
{
return [[0]*n]; // I have no idea what the [[0]*n] syntax means
}
if (n == 0)
{
return new double[0]; // I think this is just an empty array
}
if (n == 1)
{
return new double[1] {k}; // I think this is just an empty array
}
//Part I don't understand
return [[0]+val for val in MultiChoose(n-1,k)] + \
[[val[0]+1]+val[1:] for val in MultiChoose(n,k-1)]
}
我的问题是:如何转换python代码?
最佳答案
我会使用 LINQ在 C# 中翻译代码:
[]
是空列表。Enumerable.Empty<T>()
[x]
是包含单个项目 x 的列表。Enumerable.Repeat(x, 1)
[[0]*n]
是包含 n 个 0 的列表的列表。Enumerable.Repeat(Enumerable.Repeat(0, n), 1)
[X for Y in Z]
是一个列表理解。from Y in Z select X - or - Z.Select(Y => X);
X + Y
(其中 X 和 Y 是列表)是列表串联。Enumerable.Concat(X, Y)
MultiChoose 的签名是:
public IEnumerable<IEnumerable<double>> MultiChoose(int n, int k);
关于c# - Python 到 C# 代码解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2128784/