插入排序澄清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

有效地交换值ab。更准确地说,名称 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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

经典排序算法系列之插入排序和希尔排序----小白理解(python)

插入排序之python

python 排序 插入排序

请用Python手写实现插入排序

Python的冒泡排序和插入排序算法

python包含啥算法