c# - Python 到 C# 代码解释

标签 c# python

我的最终目标是将以下 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/

相关文章:

c# - 通过 ASP.NET 将 mpp 文件导入 SQL Server?

c# - 索引到 ArrayList 的结果出现 InvalidCastException

c# - Color.Red 不能作为属性中的参数

python - 分段函数不起作用

python - Selenium/Python - 如何按随机选择的像素滚动?

python - numpy 数组大小的困惑

python - 按行查找矩阵和向量之间的交集

c# - Thrift 非阻塞服务器 c#

Python - Googletrans用于循环中的多个txt文件

c# - 使用 Xunit 运行 Specflow 但出现错误 nunit.framework