2011-12-31 7 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

+0

고맙습니다. 이것은 좀 더 예쁘고 dkamins가 지적한대로 더 빠릅니다. – jbssm

1

슬라이스/슬라이스 지정으로 파이썬에서 변수를 교환하는 일반적인 메커니즘을 결합하십시오.

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

아니, 아니, 아니이 있는지 확인해야합니다 시도! 이것은 당신이 생각하고있는 파이썬이 아닙니다! 파이썬에서 튜플 압축 풀기와 튜플 할당은'a, b = b, a'라고 쓴다. – PaulMcG

+0

@PaulMcGuire 동의 함. 당신의 대답 (내가 전진 한)에 대한 제 코멘트를보십시오 ('a, b = b, a'는 가장 빠름). 그러나 temp를 통한 스와핑은 모든 프로그래머의 툴박스에 보관하기위한 고전적인 마이크로 알고리즘입니다. – dkamins