스크립트가 현재 작동하지 않는 이유를 설명하기 위해, 나는 변수의 이름을 바꿀 수 있습니다 unsorted
로 sorted
.
처음에는 목록이 아직 정렬되지 않았습니다. 물론로 설정 sorted
했습니다 False
.
while
루프를 시작하자마자 목록이 이미 정렬되어 있다고 가정합니다. 아이디어는 이것입니다. 올바른 순서가 아닌 두 가지 요소를 찾으면 sorted
다시로 설정 합니다 False
. 잘못된 순서로 요소가없는 경우에만sorted
유지 True
됩니다 .
sorted = False # We haven't started sorting yet
while not sorted:
sorted = True # Assume the list is now sorted
for element in range(0, length):
if badList[element] > badList[element + 1]:
sorted = False # We found two elements in the wrong order
hold = badList[element + 1]
badList[element + 1] = badList[element]
badList[element] = hold
# We went through the whole list. At this point, if there were no elements
# in the wrong order, sorted is still True. Otherwise, it's false, and the
# while loop executes again.
코드를보다 효율적으로 또는 읽을 수있게 해주는 사소한 문제도 있습니다.
에서 for
루프, 당신은 변수를 사용 element
. 기술적으로 element
는 요소가 아닙니다. 리스트 인덱스를 나타내는 숫자입니다. 또한 꽤 길다. 이 경우 i
"index" 와 같은 임시 변수 이름 만 사용하십시오 .
for i in range(0, length):
이 range
명령은 하나의 인수 ( stop
) 만 사용할 수도 있습니다 . 이 경우 0에서 해당 인수까지의 모든 정수 목록이 표시됩니다.
for i in range(length):
파이썬 스타일 가이드는 변수가 밑줄과 소문자로 명명하는 것이 좋습니다. 이것은 다음과 같은 작은 스크립트에 대한 아주 작은 nitpick입니다. 파이썬 코드와 가장 유사한 것에 익숙해지는 것이 더 좋습니다.
def bubble(bad_list):
두 변수의 값을 바꾸려면 튜플 할당으로 작성하십시오. 오른쪽은 튜플로 평가 된 다음 (예 : (badList[i+1], badList[i])
is (3, 5)
) 왼쪽의 두 변수에 할당됩니다 ( (badList[i], badList[i+1])
).
bad_list[i], bad_list[i+1] = bad_list[i+1], bad_list[i]
모두 합치면 다음과 같이됩니다.
my_list = [12, 5, 13, 8, 9, 65]
def bubble(bad_list):
length = len(bad_list) - 1
sorted = False
while not sorted:
sorted = True
for i in range(length):
if bad_list[i] > bad_list[i+1]:
sorted = False
bad_list[i], bad_list[i+1] = bad_list[i+1], bad_list[i]
bubble(my_list)
print my_list
(나는 당신의 인쇄 진술도 제거했습니다.)