【问题标题】:What is the role of a for loop in an array?数组中for循环的作用是什么?
【发布时间】:2020-08-31 05:25:12
【问题描述】:

给定以下伪代码(objArray(1) 表示已创建一个包含一个条目的数组)

class Stack:
  def __init__(self):
    self.data = objArray(1)
    self.N = 0

  def __resize(self,capacity):
    copy = objArray(capacity)
    for i in range(self.N):
     copy[i] = self.data[i]
    self.data = copy

我不明白这应该如何工作。让我们一步一步来:

首先,我们创建一个包含 1 个条目的数组。我们将 N 设置为 0。到目前为止一切顺利。

下一个函数使用参数初始化变量copy = objArray(capacity)。也清楚。

现在我开始感到困惑了。我们在构造函数中初始化了N = 0。所以我们的 range 函数的参数是 0,对吧?据我所知,在 python 中,range 函数将参数减 1。那么我们的 range 函数会变为 -1 吗?如果我明白这一点,也许 for 循环的作用对我来说可能会变得更清楚。

【问题讨论】:

  • 也许您可以像这样进行自己的实验:for i in range(0): print(i)。您将看到没有打印任何内容,因此在N = 0 的情况下,循环变为nop
  • 您的问题仅仅是当 N 为 0 时会发生什么,还是更广泛地说,为什么存在循环? (它需要在 N 不为 0 时存在,如果堆栈多次调整大小可能会发生这种情况。)

标签: python arrays for-loop stack variable-assignment


【解决方案1】:

range(0) 为空;如果N == 0,代码中的for 循环将不会执行任何操作。如果N 表示堆栈的大小,这是正确的;如果堆栈为零,则没有可复制的内容,对吗?

实际上,没有理由这样做,因为您的内部数组可能会跟踪它自己的长度:

class Stack:
    def __init__(self):
        self.data = []  # empty list

    def __resize(self, capacity: int) -> None:
        copy = [None] * capacity
        for i in range(min(len(self.data), capacity)):
            copy[i] = self.data[i]
        self.data = copy

这仍然是一个尴尬的例子,因为 Python 列表会自行调整大小,并且已经很容易用作堆栈,而无需将它们包装在类中,但希望它能让您更好地了解 lenrange 的工作原理.

【讨论】:

  • 谢谢。 N 计算堆栈中元素的数量。我也有函数objArray(1) 的源代码,它声明创建了一个数组,但在这种情况下,条目将是“无”,以证明堆栈中没有元素。我希望这是有道理的。不管怎样,谢谢,现在事情清楚多了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-20
  • 1970-01-01
  • 1970-01-01
  • 2021-02-28
  • 2021-06-04
相关资源
最近更新 更多