2011-12-31 47 views
0

有什麼簡單的方法可以在數組中交換2個元素的位置 - 或者更好的是n個元素嗎?Python中2個數組元素的交換位置

我想出了一些代碼,但它看起來很醜陋,性能應該是有點不好:

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個元素。你有什麼主意嗎?

回答

6

嘗試

>>> chromo[gene1Pos], chromo[gene2Pos] = chromo[gene2Pos], chromo[gene1Pos] 

所以你只需要確保你有合適的genXPos

+1

請參閱http://stackoverflow.com/questions/4554130/fastest-way-to-swap-elements-in-python-list討論編譯到的內容以及爲什麼它是最快的。 – dkamins 2011-12-31 02:23:43

+0

謝謝。這有點漂亮,dkamins指出,速度更快。 – jbssm 2011-12-31 02:27:06

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] 
-1

你在做什麼沒有問題。儘管可以通過刪除一個臨時變量來簡化它。要交換ab,所有你需要的是這樣的:

tmp = a 
a = b 
b = tmp 
+2

不,不,不!這不是你正在考慮的Python!在Python中,元組解包和元組賦值允許你編寫:'a,b = b,a'完成! – PaulMcG 2011-12-31 03:03:51

+0

@PaulMcGuire同意。看到我對你的回答(我提高了)重新表現的評論('a,b = b,a'是最快的)。但是通過temp進行交換並且始終是一個經典的微算法,可以保存在任何程序員的工具箱中。 – dkamins 2011-12-31 04:07:16