插入排序澄清Python [重复]
Posted
技术标签:
【中文标题】插入排序澄清Python [重复]【英文标题】:insertion sort clarification Python [duplicate] 【发布时间】:2014-10-23 10:25:28 【问题描述】:您好,我对他 for j 循环中的 if 语句有疑问。我了解您将较小的值与较大的值交换,但我不明白为什么将其写为waarde, rij[j] = rij[j], waarde
。逗号是 Python 中的某种交换器吗?
def insertionsort(rij):
for i in range(len(rij)):
waarde = rij[i]
for j in range(0, i):
if waarde<rij[j]:
waarde, rij[j] = rij[j], waarde
rij[i] = waarde
【问题讨论】:
@Stefano 你打败了我。当我看到输出时,我正在格式化。 :) 【参考方案1】:在 Python 中,
a, b = b, a
有效地交换值a
和b
。更准确地说,名称 a
现在将引用之前由 b
引用的值,反之亦然。
这称为元组打包/解包。逗号构建元组;交换由=
完成。
“幕后”发生的事情是这样的:
评估元组b, a
。您可以想象此评估的结果将存储在一个未命名的临时变量中。我们称该变量为temp
。
赋值运算符=
现在导致temp
被分配给=
左侧的名称。如果左边只有一个名字,比如x = b, a
,那么x
就会被分配到元组b, a
。
由于左侧有多个名称,temp
将按顺序“解包”到这些名称中。
a
将被分配temp[0]
的值(它保存b
指向的值),b
将被分配temp[1]
的值。
注意两边名字的个数必须一致:
>>> a = 1
>>> b = 2
>>> c = 3
>>> a, b = c, b, a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: too many values to unpack (expected 2)
但是您可以使用元组打包运算符*
告诉 Python 将剩余的值打包成一个名称:
>>> a, *b = c, b, a
>>> a
3
>>> b
[2, 1]
【讨论】:
【参考方案2】:在 Python 中,您可以像这样分配多个变量:
a, b = "A", "B"
这就是说:将=
右侧的第一个值分配给=
左侧的第一个名称,并将=
右侧的第二个值分配给第二个名称=
的左侧。
你也可以用三个或更多的变量来做到这一点:
a, b, c, d = "A", "B", "C", "D"
您可以使用此功能来交换变量的值:
a, b = b, a
现在,当您打印 a
时,您会得到“B”,当您打印 b
时,您会得到“A”。
【讨论】:
以上是关于插入排序澄清Python [重复]的主要内容,如果未能解决你的问题,请参考以下文章