与此Python等价的C#是什么?

时间:2019-08-09 15:29:00

标签: c# python

Originating from here,相当于此代码的C#是什么?我认为**是指数,但我不知道[i]的作用。

def sequence(v, p, column):
    subsequence = []
    for i in range(v):
        subsequence += [i] * v**(p - column)
    return subsequence * v**(column - 1)

1 个答案:

答案 0 :(得分:6)

一个人可以做:

public static List<int> sequence(int v, int p, int column) {
  var subsequence = new List<int>();
  for (int i = 0; i < v; i++) {
    int limit = (int)Math.Pow(v, p - column);
    for (int j = 0; j < limit; j++)
      subsequence.Add(i);
  }

  var true_sequence = new List<int>();
  for (int k = 0; k < (int)Math.Pow(v, column - 1); k++)
    true_sequence.AddRange(subsequence);

  return true_sequence;
}

[i] * <number>表示“重复<number>次此列表并将结果放入新列表”。 [i]只是一个仅包含数字i的列表。

编辑:说明

for i in range(v):

很好地翻译为:

for (int i = 0; i < v; i++) {
subsequence += [i] * v**(p - column)

这有点复杂,但其本质上是说“取v,将其取为(p-列)的幂,然后将i的数量加到子序列中”。接近:

int limit = Math.Pow(v, p - column);
for (int j = 0; j < limit; j++)
  subsequence.Add(i);
return subsequence * v**(column - 1)

现在,这就是“将v用作(列-1)的幂,并返回包含这么多子序列实例的列表”。这就是该函数中其余代码的作用:获取Math.Pow(v,column-1)子序列,将它们全部添加到列表中,然后返回所述列表。