【问题标题】:Psuedo-Pointer Functionality in PythonPython 中的伪指针功能
【发布时间】:2013-07-27 21:22:41
【问题描述】:

我想在顶点数组上运行收缩算法 n^2 次,以计算图的最小割。在第一次 for 循环迭代之后,数组被更改,剩余的迭代使用更改后的数组,这不是我想要的。 如何模拟指针,以便在每次 for 循环迭代期间获得原始输入数组?

  def n_squared_runs(array):
        min_cut, length = 9999, len(array) ** 2
        for i in range(0, length):
            # perform operation on original input array
            array = contraction(array)
            if len(array) < min_cut:
                min_cut = len(array)
        return min_cut

【问题讨论】:

    标签: python arrays pointers python-2.7 for-loop


    【解决方案1】:

    contraction() 操作应该创建并返回一个新数组,而不是就地修改它作为参数接收的数组 - 你也应该为返回的数组使用不同的变量名,很明显 em> 如果你使用array 来命名参数和局部变量,参数将在函数内部被覆盖。

    这与指针无关,而是与使用的函数的协定有关。如果必须保留原始array,则辅助函数需要确保强制执行此限制。请注意,如果您这样做,在 Python 中:

    array = [1, 2, 3]
    f(array)
    

    f 函数接收到的 array 与在其“外部”声明的相同 - 事实上,f 接收到的只是数组的引用,而不是它的副本 - 因此,您在 f 内部对数组所做的任何修改自然都会反映在外部。另外,值得指出的是,Python 中的所有参数都获取passed by value,并且语言中不存在指针或引用传递之类的东西。

    【讨论】:

    • 嗯,这应该很明显。谢谢。
    【解决方案2】:

    不要覆盖原始数组。

      def n_squared_runs(array):
            min_cut, length = 9999, len(array) ** 2
            for i in range(0, length):
                # perform operation on original input array
                new_array = contraction(array)
                if len(new_array) < min_cut:
                    min_cut = len(new_array)
            return min_cut
    

    【讨论】:

      猜你喜欢
      • 2012-02-18
      • 2013-12-18
      • 2013-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-04
      • 1970-01-01
      相关资源
      最近更新 更多