为什么多变量分配适用于快速排序算法但不适用于逐行分配?
Why does multiple variable assigment work for a quick sort algorithm but not for line by line assignment?
基本上试图理解为什么为快速排序实现进行多变量赋值会起作用,如下所示:
if a_list[i] > a_list[i+1]:
a_list[i], a_list[i+1] = a_list[i+1], a_list[i]
但不是一行一行地做,像这样:
if a_list[i] > a_list[i+1]:
a_list[i] = a_list[i+1]
a_list[i+1] = a_list[i]
如果有帮助的话,这里是完整的代码:
def bubble_sort(a_list):
last_ind = len(a_list) - 1
flag = True
while flag:
flag = False
for i in range(0, last_ind):
if a_list[i] > a_list[i+1]:
a_list[i], a_list[i+1] = a_list[i+1], a_list[i]
flag = True
return a_list
a_list = [5,8,2,1]
print(bubble_sort(a_list))
例子
a_list[i] = a_list[i+1]
a_list[i+1] = a_list[i]
将修改 a_list
中索引 i
处的值,然后将索引 i + 1
设置为修改后的值。您可以将多重赋值语法视为 Python 同时执行两个赋值,因此一个赋值不会影响另一个。
在第一个实现中,在幕后 python 将创建一个元组来存储两个变量的值,然后更改变量的值。
在a_list[i]
的值改变后的第二次实现中,之前的值丢失了,所以无法将a_list[i+1]
设置为正确的值。
说a, b= 1, 2
。本质上,它进行元组拆包,以便为左侧(元组)的值分配右侧(元组)对应元素的值。
例如上面的考试意味着 (a, b) = (1, 2)
这反过来意味着 a=1
和 b=2
现在假设 a=5
和 `b=10'
a = 5
b = 10
# Right method
a, b = b, a # same as saying (a, b) = (10, 5) and thus assigning a = 10 and b = 5
# Wrong method
a = b # a is now assigned 10
b = a # a is 10 from the previous line, and b is now assigned 10
我不会说第一种方法是即时的,而第二种方法是手动的,而是它们做两种不同的事情。其中之一是将一个值元组(碰巧存储在变量中)解包成一个变量元组,而另一个我猜是错误的变量赋值。
使第二种方法起作用的一种方法是
c = a # new variable stores value of a
a = b # a is reassigned to the value of b
b = c # b is now reassigned to the original value of a (which was previously stored in c)
基本上试图理解为什么为快速排序实现进行多变量赋值会起作用,如下所示:
if a_list[i] > a_list[i+1]:
a_list[i], a_list[i+1] = a_list[i+1], a_list[i]
但不是一行一行地做,像这样:
if a_list[i] > a_list[i+1]:
a_list[i] = a_list[i+1]
a_list[i+1] = a_list[i]
如果有帮助的话,这里是完整的代码:
def bubble_sort(a_list):
last_ind = len(a_list) - 1
flag = True
while flag:
flag = False
for i in range(0, last_ind):
if a_list[i] > a_list[i+1]:
a_list[i], a_list[i+1] = a_list[i+1], a_list[i]
flag = True
return a_list
a_list = [5,8,2,1]
print(bubble_sort(a_list))
例子
a_list[i] = a_list[i+1]
a_list[i+1] = a_list[i]
将修改 a_list
中索引 i
处的值,然后将索引 i + 1
设置为修改后的值。您可以将多重赋值语法视为 Python 同时执行两个赋值,因此一个赋值不会影响另一个。
在第一个实现中,在幕后 python 将创建一个元组来存储两个变量的值,然后更改变量的值。
在a_list[i]
的值改变后的第二次实现中,之前的值丢失了,所以无法将a_list[i+1]
设置为正确的值。
说a, b= 1, 2
。本质上,它进行元组拆包,以便为左侧(元组)的值分配右侧(元组)对应元素的值。
例如上面的考试意味着 (a, b) = (1, 2)
这反过来意味着 a=1
和 b=2
现在假设 a=5
和 `b=10'
a = 5
b = 10
# Right method
a, b = b, a # same as saying (a, b) = (10, 5) and thus assigning a = 10 and b = 5
# Wrong method
a = b # a is now assigned 10
b = a # a is 10 from the previous line, and b is now assigned 10
我不会说第一种方法是即时的,而第二种方法是手动的,而是它们做两种不同的事情。其中之一是将一个值元组(碰巧存储在变量中)解包成一个变量元组,而另一个我猜是错误的变量赋值。
使第二种方法起作用的一种方法是
c = a # new variable stores value of a
a = b # a is reassigned to the value of b
b = c # b is now reassigned to the original value of a (which was previously stored in c)