我剛剛遇到了一個Python問題,我最終修復了自己。雖然我仍然不知道有什麼用在Python中使用arrayName和arrayName [:]有什麼區別?
arrayName
和
arrayName[:]
即使他們有相同的價值觀的差異。這裏是我的代碼,我有問題:
def quickSort(ar, start, end):
count = 0
if end - start >= 2:
p = ar[end-1]
pos = start
for i in range(start, end-1):
if ar[i] < p:
if i != pos:
ar[i], ar[pos] = ar[pos], ar[i]
pos += 1
count += 1
ar[pos], ar[end-1] = ar[end-1], ar[pos]
count += 1
count += quickSort(ar, start, pos)
count += quickSort(ar, pos+1, end)
return count
def insertion_sort(ar):
shift = 0
for i in range(1, len(ar)):
j = i-1
key = ar[i]
while (j > -1) and (ar[j] > key):
ar[j+1] = ar[j]
shift += 1
j -= 1
ar[j+1] = key
return shift
n = int(input())
ar = list(map(int, input().split()))
print(insertion_sort(ar) - quickSort(ar, 0, n))
上面會打印-18
,但如果我改變的最後一行到
print(insertion_sort(ar[:]) - quickSort(ar[:], 0, n))
將打印1
這是insertion_sort正確(返回值()是9,quickSort()的返回值是8)。爲什麼當我沒有使用列表切片時它返回一個錯誤的值?
請參閱http://stackoverflow.com/q/2612802/3001761 – jonrsharpe