【问题标题】:What is the C# equivalent to this Python?与此 Python 等效的 C# 是什么?
【发布时间】:2019-08-09 15:29:00
【问题描述】:

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)

【问题讨论】:

  • [i] 创建一个包含i 的python list,它允许您使用+= 运算符附加到subsequence 列表。
  • 这有点跑题了,但是您确定这段代码实际上是解决其他线程中原始问题的好方法吗?它按列生成所需的序列,这似乎违反直觉,需要更多的工作才能将事物连接在一起并考虑有多少列。
  • @ggorlen,不,但这是我能找到的最好的。如果您知道其他选项,我将不胜感激。
  • 我可能会在另一个线程中添加一个答案——我对那里的那个不满意。不过,我喜欢这个问题。
  • 好的,我在另一个线程中添加了一个解决方案。我用 Python 编写了它,但我会暂时将它翻译成 C#——我希望代码比现有答案更简单。

标签: c# python


【解决方案1】:

可以做到:

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] * &lt;number&gt; 是“重复此列表&lt;number&gt; 次并将结果放入新列表”的符号。 [i] 只是一个仅包含数字 i 的列表。

编辑:解释

for i in range(v):

很好地翻译成:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2017-01-27
    • 1970-01-01
    • 2014-03-12
    • 2021-07-21
    • 1970-01-01
    • 2023-03-30
    • 2017-10-20
    • 2019-06-26
    • 2010-11-27
    相关资源
    最近更新 更多