我的最终目标是将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代码?
解决方法:
我会在C#中使用LINQ来翻译代码:
> []是空列表.
Enumerable.Empty()
> [x]是包含单个项目x的列表.
Enumerable.Repeat(x, 1)
> [[0] * n]是包含包含n个0副本的列表的列表.
Enumerable.Repeat(Enumerable.Repeat(0, n), 1)
> [Z中Y为X]是列表理解.
from Y in Z select X
- or -
Z.Select(Y => X);
> X Y(其中X和Y是列表)是列表串联.
Enumerable.Concat(X, Y)
MultiChoose的签名是:
public IEnumerable> MultiChoose(int n, int k);
标签:python,c
来源: https://codeday.me/bug/20190518/1130705.html