Python中2个数组元素的交换位置

Python中2个数组元素的交换位置,python,arrays,random,shuffle,Python,Arrays,Random,Shuffle,有没有简单的方法来交换数组中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] chro

有没有简单的方法来交换数组中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

这应该行得通,但不太好。更好的方法是一个常规的方法,比如随机。洗牌,但不是混合所有元素,而是混合n个元素。你有什么想法吗?

只要将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]

只需将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]

你所做的没有错。不过,您可以通过删除一个临时变量来简化它。要交换
a
b
,只需以下内容:

tmp = a
a = b
b = tmp

你所做的没有错。不过,您可以通过删除一个临时变量来简化它。要交换
a
b
,只需以下内容:

tmp = a
a = b
b = tmp
试一试

因此,您只需确保您拥有正确的genXPos,然后再试一次


因此,您只需确保拥有正确的genXPos即可

有关此编译的目的以及为什么它最快的讨论,请参阅。谢谢。这有点漂亮,正如dkamins所指出的,更快。有关这编译成什么以及为什么它最快的讨论,请参阅。谢谢。这有点漂亮,正如德卡明斯指出的,更快。不,不,不!这不是你想的Python!在Python中,元组解包和元组分配允许您编写:
a,b=b,a
Done@保尔·麦奎尔同意。请参阅我对您的答案的评论(我投了更高的票),以重新评估性能(
a,b=b,a
是最快的)。但是,通过temp进行交换是并且永远是一个经典的微算法,任何程序员的工具箱中都会用到。不,不,不!这不是你想的Python!在Python中,元组解包和元组分配允许您编写:
a,b=b,a
Done@保尔·麦奎尔同意。请参阅我对您的答案的评论(我投了更高的票),以重新评估性能(
a,b=b,a
是最快的)。但是,通过temp进行交换是并且将永远是任何程序员工具箱中的一个经典微算法。