有没有简单的方法来交换数组中2个元素的位置 - 或者更好的是n个元素?
我提出了一些代码,但它看起来很丑陋而且性能应该有点差:
chromo = [[1,2], [3,4], [5,6]]
gene1Pos = random.randrange(0, len(chromo)-1, 1)
gene2Pos = random.randrange(0, len(chromo)-1, 1)
tmpGene1 = chromo[gene1Pos]
tmpGene2 = chromo[gene2Pos]
chromo[gene1Pos] = tmpGene2
chromo[gene2Pos] = tmpGene1
这应该可行,但是,这并不好。更好的方法是像 random.shuffle 这样的例行程序,但不是混合所有东西,只会混合n个元素。你有什么想法吗?
答案 0 :(得分:6)
试
>>> chromo[gene1Pos], chromo[gene2Pos] = chromo[gene2Pos], chromo[gene1Pos]
所以你只需要确保你拥有正确的genXPos
答案 1 :(得分:1)
只需将Python中的变量交换的常规机制与切片/切片分配结合起来。
>>> a = [1, 2, 3, 4, 5]
>>> a[2:3], a[4:5] = a[4:5], a[2:3]
>>> a
[1, 2, 5, 4, 3]
答案 2 :(得分:-1)
你正在做的事情没有错。您可以通过删除其中一个临时变量来简化它。要交换a
和b
,您只需要:
tmp = a
a = b
b = tmp