python 中交换两个列表元素的位置为什么用numbers[i],numbers[i+1] = numbers[i+1],numbers[i]

我知晓c/c++的基本语法和一些编程技巧,但不知道这python为什么这么用,求大神解答

numbers[i], numbers[i+1] = numbers[i+1], numbers[i]

这是一个赋值语句,相当于:

t = (numbers[i+1], numbers[i])   # t是一个tuple元组

numbers[i] = t[0]

numbers[i+1] = t[1]


例如:numbers = [5, 6, 7]

          i = 0 时

赋值时就是把 numbers[i], numbers[i+1] = numbers[i+1], numbers[i] 这个语句中

等号右边的 numbers[i+1], numbers[i]  先求值,得

numbers[1] == 6

numbers[0] == 5

再把 6, 5 赋值给等号左边(因为list列表是 可变的 数据类型,它的值可以添加,删除或改变),即:

numbers[i], numbers[i+1] = 6, 5

也就是:

numbers[0], numbers[1] = 6, 5

相当于:

numbers[0] = 6

numbers[1] = 5

此时,列表numbers 的值就被改变了(两个元素交换了位置)。


在IDLE 中验证如下:

>>> numbers = [5, 6, 7]

>>> i = 0

>>> numbers[i], numbers[i+1] = numbers[i+1], numbers[i]

>>> numbers

[6, 5, 7]


最后你的问题表述【交换两个列表元素的位置】改成【交换列表中两个元素的位置】是不是更没有歧义?

追问

对。我恍然大悟,python是可以一次赋值两个变量的!谢谢!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-10-10

没看懂你的问题,代码需要写清楚点。

我看到的是 

numbers[i],numbers[i+1] = numbers[i+1],numbers[i]

这是是啥?

追问

def maopao(numbers):
for j in xrange(len(numbers)-1,-1,-1):
for i in xrange(j):
if(numbers[i] > numbers[i+1]):
numbers[i],numbers[i+1] = numbers[i+1],numbers[i]

相似回答