Вы можете видеть это как сокращение для последовательных назначений слева направо, используя временные переменные:
p, A[p + 1], A[p] = p + 1, A[p], A[p + 1]
эквивалентно
temp1 = p + 1 # 1
temp2 = A[p] # 10 (A[0])
temp3 = A[p+1] # 11 (A[1])
p = temp1 # p = 1
A[p+1] = temp2 # A[2] = 10
A[p] = temp3 # A[1] = 11
, поэтому A = [10,11,10]
Если вы поместите p
в конец списка, вы, вероятно, приблизитесь к ожидаемому результату:
A[p + 1], A[p], p = A[p], A[p + 1], p + 1
A is now [11,10,12]
P is now 1
Другими словами, постинкремент возможен, но предварительно увеличенне будет работать в сценарии такого типа (где в исходных данных используется предварительно увеличенный индекс)
Вы можете сделать это вручную, рассчитав смещение в исходных данных, но это будет несколько противоречить-интуитивный:
p, A[p+1], A[p] = p+1, A[p+1], A[p+2]