在循环中交换多维数组中元素的正确方法是什么?

时间:2018-02-16 10:46:09

标签: python loops multidimensional-array swap

我有一段代码贯穿一个表格并具有" pxover"的可支持性,交换其中的一些元素。应该交换哪些元素,可用性为0.5。当找到两个元素时,算法执行交换。 evaluate_table形成如下:

[[(x11,y11),(x12,y12), ... (x1el,y1el)],[(x21,y21),(x22,y22), ...,
  (x2el,y2el)], ... ,[(xpop1,ypop1),(xpop2,ypop2), ..., (xpopel,ypopel)]]

代码如下:

def crossover(evaluation_table, pop, no_of_elements, pxover):
    xover_positions = []
    chosen_count = 0
    for i in range(pop):
        x = uniform(0,1)
        if x<=pxover:
            chosen_count = chosen_count + 1
            if chosen_count % 2 == 0:
                for element in range(no_of_elements):
                    element_swap_prop = uniform(0, 1)
                    if element_swap_prop <= 0.5:
                        evaluation_table[i][element], evaluation_table[j][element] = evaluation_table[j][element], evaluation_table[i][element]
            else:
                j = i
        xover_positions.append(evaluation_table[i])

但是,代码不会正确地交换所有元素。一些元素被正确交换,而另一些元素与正确的索引交换&#34; el&#34;但错误的索引&#34; pop&#34;。

例如(x11,y11)应与(x31,y31)交换,但只有第一个位于第二个位置,而第一个位置(xk1,xk2)且ka数大于3。 / p>

我做了一些研究并应用了这个答案:

Can't swap the elements in a list, Python

但同样的问题仍然存在。

此外,一些不应该改变价值的元素,从随机位置获取元素!

编辑:我将代码运行到调试器中,并按交换顺序计算出来:

 evaluation_table[i][element], evaluation_table[j][element] = evaluation_table[j][element], evaluation_table[i][element]

它不仅交换i和j的内容,还交换随机随机的一两个内容。发生了什么事?

1 个答案:

答案 0 :(得分:0)

正如我所想,它与表格单元格之间的引用有关。有趣的是,当我对表格进行深度复制时,同样的问题仍然存在。我做了什么来解决这个问题,是为了深入研究epes row separetly。所以,我在这里发布解决方案:

numThreads

然后使用“xover_positions”表进行交换。似乎表格的行与前一个函数之间存在关系,所以这就解决了它。